如何使用实体框架将属性映射到不同的表

Jam*_*lls 0 c# entity-framework ef-fluent-api

我的数据库如下所示:

dbo.产品表:

Id        | int
Status    | tinyint
Run Code Online (Sandbox Code Playgroud)

dbo.ProductNames 表:

ProductId | int
Name      | nvarchar(4000)
Run Code Online (Sandbox Code Playgroud)

代码的简化版本是:

public class Product{
    public int Id { get; set; }
    public string Name { get; set; }
    public ObjectStatus Status { get; set; }
}

public class ProductEntityConfiguration : EntityConfiguration<Product> {
    public ProductEntityConfiguration() {
        ToTable("Products");
        HasKey(p => p.Id);
        Property(p => p.Id).HasColumnName("Id");
        Property(p => p.Status).HasColumnName("Status");
    }
}
Run Code Online (Sandbox Code Playgroud)

如何映射作为普通属性存在于不同表中的产品名称,以便如果有人请求,EF 必须通过 Id 连接两个表?

Ako*_*agy 5

我认为在这种情况下你必须使用实体拆分。您有一个实体(产品),并且希望将其拆分为两个表(产品和产品名称)。尝试使用以下映射:

  public class ProductEntityConfiguration : EntityConfiguration<Product> 
  {
      public ProductEntityConfiguration() 
      {
         Map(m => 
         { 
            m.Property(t => t.ProductId).HasColumnName("MyIdChanged");
            m.Property(t => t.Status).HasColumnName("Status");                
            m.ToTable("Product")
         }) 
         .Map(m => 
         { 
            m.Property(t => t.ProductId).HasColumnName("MyProductIdChanged");
            m.Property(t => t.Name).HasColumnName("MyProductName");
            m.ToTable("ProductNames"); 
         });
      }
  }
Run Code Online (Sandbox Code Playgroud)

这将配置适当的主键和外键并自动执行连接。