我先编写代码,并使用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设置为标识列,但事实并非如此。
我的问题是:通过尝试以这种方式将两个TPT对象链接在一起,我是否做了一些意想不到的事情?我还漏掉了什么吗?
发布于 2012-12-08 01:00:17
正如上面的@leppie所指出的,我必须用注释表(“LocationElements”)来装饰LocationElement类,这立即修复了这个问题。我对EF的理解是,对于TPT设计的基表,这不是必需的,而且我还没有在项目/ ScientificLicence对上这样做(也就是说,我只装饰了ScientificLicence对象)。
我假设这与我保存新项目对象时添加/持久化LocationElements的方式有关。如果任何人有任何额外的见解,我很想知道更多。
希望这对其他人有所帮助,并非常感谢leppie!
https://stackoverflow.com/questions/13754839
复制相似问题