我正在做代碼,並使用每個類型的表設計。將第二個對象擴展到多個表時,出現以下錯誤:實體框架5和TPT設計問題
跨多個實體或關聯共享的值在多個位置生成。檢查映射是否將EntityKey分割爲多個商店生成的列。
我的數據庫看起來像:
感謝贊成票,編輯加我的圖片:
的POCO爲項目的樣子:
public abstract class Project {
public int ProjectID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual ICollection<LocationElement> LocationElements { get; set; }
public abstract string getProjectIdentifier();
}
而對於一個位置元素:
public enum HowObtainedCodes {
Provided = 1,
Estimated = 2,
Summarized = 3
}
public abstract class LocationElement {
public int LocationElementID { get; set; }
public int ProjectID { get; set; }
public HowObtainedCodes HowObtainedCodeID { get; set; }
}
並用於一點:
[Table("ProvidedPoints")]
public class ProvidedPoint : LocationElement {
public double Lat { get; set; }
public double Long { get; set; }
public string Description { get; set; }
}
從項目(抽象)到科學許可證的鏈接工作正常,我的對象加載/保持按預期。此外,如果我使它不是抽象的,我可以添加LocationElements對象。只要我擴展LocationElements並嘗試保存一個ProvidePoint對象,我就會收到上面的消息。我的第一個想法是ProvidePoints上的LocationElementID被設置爲Identity列,但事實並非如此。
我的問題是:我是否在嘗試以這種方式將兩個TPT對象鏈接在一起,從而做出意想不到的事情?我錯過了別的嗎?
有! Upvoted!也許你現在可以發佈圖像з –
我不知道EF,但看起來你應該裝飾你的抽象類('LocationElement'),否則它會如何知道表? – leppie
我在嘗試你的建議之前寫的是什麼:我認爲它遵循映射的命名約定(即,除非另有說明,LocationElement將自動映射到LocationElements。我相信你只需要在子類中執行此操作,因爲它正在爲該項目對象沒有註釋 我在寫完後我寫的是:Holy(&*^* ^#,就是這樣! – Matthew