使用实体基类时的 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; 

我让我的两个实体 ProductProcess 继承自这个 Entity 基类,当然还从每个类中删除了 ID 属性。所以这两个实体是相同的,只是 ID 属性现在在基类中实现。

编译并运行我的项目后,我收到以下“著名的”EF 运行时错误:

“序列包含多个匹配元素”

我知道这个错误与多对多关联有关,因为如果我从Process 类中删除多对多映射,一切都会正常运行,但当然没有关联。

谁能看出这里有什么问题?这是 CTP5 错误还是我的实现有问题?如果结果是错误,您有解决方法的建议吗?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,只是多对一关联。见this answer

简而言之:在解决此问题之前不要使用基实体类;您可以使用接口代替 Id 属性。

【讨论】:

我担心这就是问题所在。但感谢您确认 Diego。你知道 MS 是否知道这个错误,是否会在 RTM 中修复? @TommyJakobsen:我不知道;我在论坛里问过,但还没有得到答案。 看来问题现在已经解决了,所以我会接受这个答案来关闭线程。

以上是关于使用实体基类时的 EF CTP5 映射问题的主要内容,如果未能解决你的问题,请参考以下文章

EF4 CTP5 代码优先实现中的实体拆分场景

EF4 CTP5 - 映射没有对象引用的外键?

EF继承/基类问题

EF4 CTP5 Code First 方法忽略表属性

EF4 CTP5 POCO 中的软删除、导航属性

WCF 数据服务和 EF4 CTP5,如何为查询配置默认的急切加载模式?