2

編集または詳細アクションからモデルにアクセスしようとすると、エラーが発生し続けます。

データベースが作成されてから、'InjuriesContext' コンテキストをサポートするモデルが変更されました。Code First Migrations を使用してデータベースを更新することを検討してください (http://go.microsoft.com/fwlink/?LinkId=238269)。

最初に、何も変更していないと確信していたにもかかわらず、移行を追加しようとしました。データベースの更新後も同じエラーを受け取りました。

次に、すべての移行とデータベースを削除し、最初の移行と更新でクリーンなデータベースを開始しました。同じエラー。何も変更されませんでした。

モデルは:

public class InjuriesContext : DbContext
    {
        public InjuriesContext()
            : base("DBCon")
        {
        }

        public DbSet<Patient> Patients { get; set; }

        public DbSet<Injury> Injuries { get; set; }
    }

    public class Injury
    {
        public int Id { get; set; }
        public string Type { get; set; }
        public int PatientId { get; set; }
    }

ここにコントローラがあります -

public ActionResult Edit(int id = 0)
        {
            Injury injury = db.Injuries.Find(id);
            if (injury == null)
            {
                return HttpNotFound();
            }
            return View(injury);
        }

これは、傷害に関するエラーです。私は怪我をしていないので、他のコントローラーと同じように 404 を返すことを期待していますが、これについて何か気に入らないことがあります。これと私の他のモデルとの唯一の違いは、複数形の y から ies です。Entity Framework はこれを処理しませんか?

4

2 に答える 2

1

とにかく、クラスですべてを明確に定義したため、複数形の制限はありません。

Injuries テーブルを作成しましたか?

テーブルの怪我は自動的に作成されると思います。可変傷害は少し近いかもしれませんが、これは自分でテストする必要があります。

むしろ試してください:

public class Injury
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Type { get; set; }
    [Required]
    public int PatientId { get; set; }
}


    private InjuriesContext db = new InjuriesContext();
    Injury objInjury = db.Injuries.Find(id);
    if (objInjury == null)
    {
        return HttpNotFound();
    }
    return View(objInjury);

お役に立てれば

于 2013-01-04T00:55:39.520 に答える
0

私の問題は複数のコンテキストにあったことがわかりました。モデル クラスごとに個別のコンテキストを作成する必要があると思いました。どうやら Entity Framework には 1 つのコンテキストが必要です。コンテキストに合わせてクラスを作成し、すべての DBset をそのクラスに配置しました。

    public class ProjContexts : DbContext
    {
         public ProjContexts()
            : base("ProjDBCon")
        {
        }

        public DbSet<Patient> Patients { get; set; }
        public DbSet<PreHosp> PreHosps { get; set; }
        public DbSet<UserProfile> UserProfiles { get; set; }
        public DbSet<Injury> Injuries { get; set; }

    }
}

次に、この投稿に従ってすべての移行を削除し、移行を再度有効にして、移行と更新を追加し、期待どおりの結果を得ました。

結論 --- プロジェクトに複数のコンテキスト クラスを持たないでください。これが可能かどうかはわかりませんが、上記を変更した後、すべてが期待どおりに機能しています。2 つの別個のコンテキストがあり、3 つ目のコンテキストを追加したときに、なぜ機能していたのかわかりませんか? たぶん、お互いに外部キーを持っていたからでしょうか?

于 2013-01-09T20:22:32.177 に答える