使用实体基类时的 EF CTP5 映射问题
Posted
技术标签:
【中文标题】使用实体基类时的 EF CTP5 映射问题【英文标题】:EF CTP5 mapping problem when using a Entity base class 【发布时间】:2011-02-23 11:52:04 【问题描述】:当涉及到基类时,我在 EF CTP5 中遇到了多对多关系的奇怪问题。我将首先向您展示一个有效的简单映射。
我有以下两个类(实体):
public class Product
public int ID get; set;
public string Name get; set;
public virtual ICollection<Process> Processes get; set;
public class Process
public int ID get; set;
public string Name get; set;
public virtual ICollection<Product> Products get; set;
还有我的映射类:
public class ProductMapping : EntityTypeConfiguration<Product>
public ProductMapping()
ToTable("Products");
HasKey(t => t.ID);
Property(t => t.ID).HasColumnName("product_id");
Property(t => t.Name).HasColumnName("name");
public class ProcessMapping : EntityTypeConfiguration<Process>
public ProcessMapping()
ToTable("Processes");
HasKey(t => t.ID);
Property(t => t.ID).HasColumnName("process_id");
Property(t => t.Name).HasColumnName("name");
HasMany(p => p.Products)
.WithMany(p => p.Processes)
.Map(m =>
m.ToTable("Product_processes");
m.MapLeftKey(process => process.ID, "process_id");
m.MapRightKey(product => product.ID, "product_id");
);
此映射完美运行。 但是,我想为我的实体引入一个基类。因此,作为开始,我创建了以下基类:
public abstract class Entity
public int ID get; set;
我让我的两个实体 Product
和 Process
继承自这个 Entity
基类,当然还从每个类中删除了 ID 属性。所以这两个实体是相同的,只是 ID 属性现在在基类中实现。
编译并运行我的项目后,我收到以下“著名的”EF 运行时错误:
“序列包含多个匹配元素”
我知道这个错误与多对多关联有关,因为如果我从Process
类中删除多对多映射,一切都会正常运行,但当然没有关联。
谁能看出这里有什么问题?这是 CTP5 错误还是我的实现有问题?如果结果是错误,您有解决方法的建议吗?
【问题讨论】:
【参考方案1】:我遇到了同样的问题,只是多对一关联。见this answer
简而言之:在解决此问题之前不要使用基实体类;您可以使用接口代替 Id 属性。
【讨论】:
我担心这就是问题所在。但感谢您确认 Diego。你知道 MS 是否知道这个错误,是否会在 RTM 中修复? @TommyJakobsen:我不知道;我在论坛里问过,但还没有得到答案。 看来问题现在已经解决了,所以我会接受这个答案来关闭线程。以上是关于使用实体基类时的 EF CTP5 映射问题的主要内容,如果未能解决你的问题,请参考以下文章