gpt4 book ai didi

c# - 覆盖 EF Core 数据访问层中的类

转载 作者:太空狗 更新时间:2023-10-30 01:29:27 27 4
gpt4 key购买 nike

我的公司有一个在我们所有客户之间共享的核心数据库模式,然后我们为每个客户提供特定于客户的模式。核心数据库本身永远不会改变。我们希望为核心数据访问项目制作一个 NuGet 包,然后让我们的客户特定项目从该项目扩展。

我已将一切设置为从核心项目继承并且工作正常。我现在的问题是我们需要向核心类之一添加导航属性。该表完全相同,但我们向该核心表添加了一个带有 FK 的客户特定表,因此需要一个导航属性。是否可以这样做,基本上用客户特定的类覆盖核心类?

例如,这是一个核心类:

public class Shape
{
public int Id { get; set; }
public string Name { get; set; }
}

一位客户现在想要添加每个形状可以拥有的颜色:

public class ShapeColor
{
public int Id { get; set; }
public string HexCode { get; set; }
public int ShapeId { get; set; }

public Shape Shape { get; set; }
}

核心类在数据库中没有改变,但我们需要一个导航属性才能为 EF Core 配置它:

public class Shape
{
public int Id { get; set; }
public string Name { get; set; }

public ICollection<ShapeColor> Colors { get; set; }
}

最佳答案

AppDbContext 类应该是可继承的,方法 OnModelCreating 无论如何都是可覆盖的。在派生的 DbContext 类的 OnModelCreating 方法中,添加以下代码来定义关系。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// modelBuilder.Entity<Shape>().HasKey(x=>x.Id);

modelBuilder.Entity<ShapeColor>(x =>
{
// x.HasKey(p => p.Id);
x.Property(p => p.ShapeId).IsRequired();
x.HasOne<Shape>().WithMany().HasForeignKey(y => y.ShapeId);
});
base.OnModelCreating(modelBuilder);
}

另外,我在每个类中使用 [Key] 属性修饰了 Id 属性。如果您不想使用 [Key] 属性进行装饰,请使用 Fluent 表达式并定义 Id 属性。

关于c# - 覆盖 EF Core 数据访问层中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com