2011-04-21 21 views
1

我得到了這個簡單的類層次結構;實體框架4.1:使用TPH並將屬性映射到現有數據庫列

public class A 
{ 
[Key] 
public int Id { get; set; } 
} 

public class B : A 
{ 
public string Name { get; set; } 
} 

public class C : A 
{ 
public string Name { get; set; } 
} 

使用TPH這將結束upp與表看起來像這樣;

表A,字段Id,Name,Name1,Discriminator。

我想要B類和C名屬性映射到相同的字段,即名稱,使用這些映射。

Property(x => x.Id) 
    .HasColumnName("Id"); 

Map<B>(m => 
{ 
    m.Properties(p => new 
    { 
     Name = p.Name, 
    }); 
}); 

Map<C>(m => 
{ 
    m.Properties(p => new 
    { 
     Name = p.Name, 
    }); 
}); 

我如何確保將我的子類型(B和C)屬性名稱映射到同一列?是否有一個HasColumnName與Properties集合一起使用?

回答

2

THP不允許您在對象之間共享屬性,除非屬性位於基類上。使用TPH,屬性可以在所有實現之間共享,也可以屬於某個專用實現。

在基類上放置名稱屬性,這應該可以解決您的問題。

+0

這可能會很麻煩,因爲我的真正問題涉及更多具有不同屬性的子類......但是無論如何,我意識到我必須採用TPT方式以最佳方式滿足我的要求。 – Per 2011-04-22 22:11:23

相關問題