2016-04-13 69 views
1

我得到了我的不同項目的工作,不得不改變模型中的一個小東西,迫使我放棄我的表並重新創建它們。 。研究我發現我必須使用初始化器(DropCreateDatabaseAlways)長時間此外,我創建了一些自定義的初始值設定爲種子我的數據庫測試數據現在每次我跑我的應用程序收到以下異常:實體框架元素集合中不存在成員

元數據集中不存在標識爲'SGDB.DAL.Contexts.Person_Department'的成員 。參數名稱:標識

在我改變我的模型之前(與Person和Department之間的關係無關),一切正常。此外,我所有模型的標識符都被命名爲Id(如EF所期望的)並用[Key]屬性進行裝飾。

是的,我已經閱讀了關於這個主題的其他線索,但是解決方案是爲每個外鍵創建一個Id屬性(在我的情況下是Person.c中的DepartmentId),但是我不喜歡那個 - 特別是因爲我知道它工作過。

可能是什麼原因?

更新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(); 

    } 

回答

0

我有同樣的問題。我的問題與我的一張桌子上的「插入」觸發器有關。

EF框架通過調用scope_identity()對插入的數據行執行驗證。但是,「替代插入」觸發器將以EF系統對scope_identity的調用返回null的方式更改插入的上下文。

你可以做一些這樣的:

  1. 刪除,而不是插入扳機(爲我工作)。
  2. 關閉EF框架中的驗證context.Configuration.ValidateOnSaveEnabled = false; (這也 工作)

希望它會幫助你。

+0

關閉驗證並未解決我的問題。您首次提到的解決方案嘗試如何工作?我對EF非常陌生 - 我將一個新部門種入數據庫,並在接種新人時調用這個數據集(var department = new DepartmentContext()。Departments.First();) - 或者這可能是問題?如果是這樣 - 我應該如何從數據庫檢索數據以插入新人? – C4p741nZ

0

我也遇到過這個問題,並且通過將下面的代碼添加到插入觸發器的末尾來修復它。

SELECT SCOPE_IDENTITY() AS <IdFieldName>