[英]EF : no mapping specified for properties
我有兩張表MeetingPollingQuestion
和MeetingPollingParts
。 會議投票問題 pk MeetingPollingQuestionId
是meeting polling parts
的外鍵。 我想插入MeetingPollingQuestion
然后使用 PK 將行插入到MeetingPollingParts
中。 我收到有關“沒有為屬性指定映射”的錯誤消息,我不確定這意味着什么。
我的代碼:
mf.MeetingPollingId = mpq.MeetingPollingId;
mf.MeetingPollingQuestionType = mpq.MeetingPollingQuestionType;
mf.SequenceOrder = mpq.SequenceOrder;
db.MeetingPollingQuestions.Add(mf);
var MeetingPollingPartList = new List<EFModel.MeetingPollingPart>();
foreach (var p in mpq.MeetingPollingParts)
{
var mfParts = new EFModel.MeetingPollingPart();
mfParts.MeetingPollingQuestionId = mf.MeetingPollingQuestionId;
mfParts.Type = p.Type;
MeetingPollingPartList.Add(mfParts);
}
db.MeetingPollingParts.AddRange(MeetingPollingPartList);
db.SaveChanges();
dbTran.Commit();
這是我得到的錯誤:
從第 4481 行開始映射片段時出現問題:沒有為 Set MeetingPollingParts 中的屬性 MeetingPollingPart.MeetingPollingQuestionMeetingPollingQuestionId、MeetingPollingPart.MeetingPollingQuestionMeetingPollingQuestionId1 指定映射。
具有密鑰(PK)的實體不會往返
使用導航屬性插入相關實體。
您的方法的問題是,當 EF 設置為使用標識列時,您將沒有 PK 可用作 FK,直到您在 DbContext 上調用SaveChanges
。 如果您使用跟蹤導航屬性,則 EF 將自動確保以正確的順序插入實體並將 FK 關聯到新插入的父記錄。
例如,MeetingPolling 應該有一個 MeetingPollingQuestions 的集合,而一個 MeetingPollingQuestion 應該有一個 MeetingPollingParts 的集合。
IE
public class MeetingPolling
{
// ID, and various fields...
public virtual ICollection<MeetingPollingQuestion> MeetingPollingQuestions { get; protected set; } = new List<MeetingPollingQuestion>();
}
public class MeetingPollingQuestion
{
// ID, and various fields....
public virtual ICollection<MeetingPollingPart> MeetingPollingParts { get; protected set; } = new List<MeetingPollingPart>();
}
更新現有 MeetingPolling 以添加/更新問題和部分時的下一個重要細節是確保這些 collections 已預先加載,以便可以對其進行修改:
var meetingPolling = db.MeetingPollings
.Include(x => x.MeetingPollingQuestions)
.ThenInclude(x => x.MeetingPollingParts)
.Single(x => x.Id == meetingPollingId);
現在,當您 go 創建您的問題時,您填充一個新的 MeetingPollingQuestion 並像現在一樣填寫詳細信息,除了將其添加到 DbContext 之外,您將其添加到您已加載的 MeetingPolling 的問題集合中:
meetingPolling.MeetingPollingQuestions.Add(newMeetingPollingQuestion);
填充 MeetingPollingParts 也是如此。 創建一個填充詳細信息的新實體,但 append 是新的 MeetingPollingQuestion。
最終結果看起來更像這樣:
var meetingPolling = db.MeetingPollings
.Include(x => x.MeetingPollingQuestions)
.ThenInclude(x => x.MeetingPollingParts)
.Single(x => x.Id == meetingPollingId);
var newMeetingPollingQuestion = new MeetingPollingQuestion
{
MeetingPollingQuestionType = mpq.MeetingPollingQuestionType,
SequenceOrder = mpq.SequenceOrder,
// ...
MeetingPollingParts = mpq.MeetingPollingParts.Select(p => new MeetingPollingPart
{
Type = p.Type,
// ...
}).ToList()
};
meetingPolling.MeetingPollingQuestions.Add(newMeetingPollingQuestion);
db.SaveChanges();
EF 將自動處理新記錄的所有 FK 分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.