2017-03-01 54 views
0

我的數據庫看起來像下面這樣的屬性不同的表映射:如何使用實體框架

dbo.Products表:

Id  | int 
Status | tinyint 

dbo.ProductNames表:

ProductId | int 
Name  | nvarchar(4000) 

而且一個簡化版本的代碼將是:

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"); 
    } 
} 

如何將產品名稱映射到不同的表中作爲普通屬性,以便如果有人請求它,E.F.必須通過Id將兩個表連接起來?

回答

1

我認爲你必須在這種情況下使用實體分割。您有一個實體(產品),並且您想將其分爲兩個表格(產品和產品名稱)。 嘗試使用下面的映射:

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"); 
     }); 
     } 
    } 

這將配置相應的主鍵和外鍵,做自動加入。

+0

感謝您的回覆。我通常喜歡明確指定所有表名和列名,我將如何使用實體拆分來做到這一點? –

+0

您可以單獨指定。只需添加像Property(p => p.Name).HasColumnName(「ProductName」);調用Map()函數之前調用構造函數。 –

+0

但是產品ID分爲兩列,我如何在兩個表中指定列名? –