有界DbContext和继承

时间:2013-10-01 13:21:19

标签: c# entity-framework-5

我有一个由两个独立的上下文组成的模型,所以我在两个独立的DbContext中实现,我有第三个DbContext,它是这两个DbContextes的基础,我有一个Base类,GeographicDbContext和PublishingDbContext中的类继承自类。 PublishingDbContext中的Publisher类与GeographicDbContext中的Country之间存在关系。现在我想告诉EntityFramework我有一个基本抽象类,它有一个ID应该映射到子类中的每个表。我知道我必须将此代码放在DbContext的OnModelCreating事件

modelBuilder.Entity<Country>().Map(x =>
            {
                x.MapInheritedProperties();
                x.ToTable("Country");
            }); 

因为Country是GeographicDbContext中的一个类,我想把这个代码放在DbContext中,但是当使用Publisher类及其导航属性Country时,我必须将这段代码添加到PublishingDbContext中,因为PublishingDbContext将导入所有相关实体进入模型。有没有办法将此代码仅放在GeographicDbContext中,我不想为特定DbContext中的每个可到达实体添加此代码。

public abstract class BaseEntity
{
    [Key]
    public int ID { get; set; }
}

[Table("Country")]
public class Country : BaseEntity
{
    public string Name { get; set; }
    public int Code { get; set; }
}

public class Publisher: BaseEntity
{
    public string Title { get; set; }

    [Column("CountryID")]
    public int? CountryID { get; set; }

    [ForeignKey("CountryID")]
    public Country Country { get; set; }
}

在上面的代码中,每个类都在不同的程序集和不同的DbContext中。

1 个答案:

答案 0 :(得分:2)

知道这是一个非常老的问题,我不再使用EF5,但我正在编写我选择作为参考的解决方案。

在单独的“ DbContext”之间建立关系是不正确的,因此我们需要另一个模仿Country类的只读类,例如,名称可以是CountryView,并且您可以将该类映射到GeographicDbContext上的同一表,或者是只读在您的数据库中查看。因此,您不能从其他DbContext编辑该类,但该类的所有者是DbContext。您只能查看只读值。