2

我有一个由两个单独的上下文组成的模型,所以我在两个单独的 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 中。

4

1 回答 1

2

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

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

于 2019-10-01T10:56:30.197 回答