我首先编写代码并使用 Table-per-type 设计。将第二个对象扩展到多个表时出现以下错误:
跨实体或关联共享的值在多个位置生成。检查映射是否不会将 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 并尝试保存一个 ProvidedPoint 对象,我就会收到上述消息。我的第一个想法是,ProvidedPoints 上的 LocationElementID 被设置为 Identity 列,但事实并非如此。
我的问题是:通过尝试以这种方式将两个 TPT 对象链接在一起,我是否做了一些意想不到的事情?我还缺少其他东西吗?