2012-06-04 63 views
1

我有以下類型:如何使用代碼優先的EF 4.3將複雜類型的屬性映射到特定的表列?

public class Minutes 
{   
    public double Value { get; set; }   
} 

該類型中的實體使用的是這樣的:

public class Race 
{ 
    public string Name { get; set; } 
    public string Location { get; set; } 
    public Minutes TotalMinutes { get; set; } 
} 

我有一個的DbContext這樣的:

public class RaceDataContext: DbContext 
{ 
    public DbSet<Race> Races { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.ComplexType<Minutes>().Property(x => x.Value); 
    } 
} 

在應用程序開發,我們一直在使用沒有問題的MS-SQL數據庫。現在,我們必須轉移到客戶端的Oracle數據庫。 Oracle數據庫包含固定的表格,我們無法更改這些表格。我們需要能夠閱讀,更新和插入比賽。所以,我已經更新了我的映射代碼,如下所示:

public class RaceDataContext: DbContext 
{ 
    public DbSet<Race> Races { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.ComplexType<Minutes>().Property(x => x.Value); 

     modelBuilder.Entity<Race>().Property(x => x.TotalMinutes).HasColumnName("RACEMINUTES"); // <-- ERROR HERE 
    } 
} 

上面的代碼不能編譯。它表示TotalMinutes必須是不可空值,可用作.Property()方法的參數。下面是來自生成輸出的實際錯誤:

類型「Races.Minutes」必須是爲了 非空值類型在通用類型或方法 「系統用它作爲參數「T」 .Data.Entity.ModelConfiguration.Configuration.StructuralTypeConfiguration.Property(System.Linq.Expressions.Expression>)」 C:\項目\種族\ RaceDataContext.cs

回答

5

你接近到該溶液中。

modelBuilder.Entity<Race>().Property(x => x.TotalMinutes.Value) 
    .HasColumnName("RACEMINUTES"); 
+0

非常感謝。當解決方案很簡單時,我喜歡它。 –

相關問題