私の異なるプロジェクトが動作していて、モデルを小さくしてテーブルを削除して再作成する必要がありました。私がアプリケーションを実行するたびに、次の例外を受け取りました:Entity Framework "メンバー[...]がメタデータコレクションに存在しません
(私は、IDが 'SGDB.DAL.Contexts.Person_Department'のメンバは、 がメタデータコレクションに存在しません。パラメータ名:identity。
私のモデルを変更する前に(人と部の関係とは関係ありません)、すべて正常に機能しました。さらに、私のすべてのモデルの識別子はId(EFが期待する)という名前で、[Key]属性で修飾されています。
私はすでにこのトピックについての他のスレッドを読んでいますが、解決策はすべての外部キー(私のケースではPerson.csのDepartmentId)のIdプロパティを作成することでしたが、私はそれが気に入らないそれは前に働いた。
原因は何でしょうか?
アップデート1:
私は、次のように新しい人をシードしようとしている:
protected override void Seed(PersonContext context) {
base.Seed(context);
var dep = new DAL.Contexts.DepartmentContext().Departments.First();
var status = new Status {
StatusType = "Test"
};
var persondata = new PersonData {
Status = status
};
context.Status.Add(status);
context.PersonData.Add(persondata);
for (int i = 0; i < 10; i++) {
var person = new Person {
Firstname = $"TestPersonFirstname{i}",
Lastname = $"TestPersonLastname{i}",
SourceType = COM.SourceType.Manual,
Department = dep,
PersonData = persondata
};
context.Persons.Add(person);
}
context.SaveChanges();
}
妥当性検査をオフにしても問題は解決しませんでした。あなたの最初に言及された解決策はどのように機能しますか?私はEFの新機能です。新しい部署(新しい部署=新しいDepartmentContext()。Departments.First();)をシードするときに、新しい部署をDBに配置してこのデータセットを呼び出すことです。 ?もしそうなら、私は新しい人物を挿入するためにデータベースからデータを取得する必要がありますか? – C4p741nZ