2012-06-20 51 views
1

我正在使用EF 4.3,正在打Oracle數據庫。由於EF如何爲Oracle數據庫生成SQL,並且由於EF 4.3不允許添加自定義約定,因此我必須爲所有CAPS中的每個屬性手動指定列名稱。如何從使用複雜類型的屬性進行映射時使列名稱全部大寫?

[Column("MYPROPERTY")] 
public string MyProperty { get; set; } 

那麼,我能做些什麼關於使用複雜類型的屬性?我有以下的複雜類型:

public class Minute { 
    public int Value { get; set; } 
} 

及以下的DbContext:

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

而且我的實體:

[Table("MYENTITY")] 
public class MyEntity { 
    [Column("MYPROPERTY")] 
    public string MyProperty { get; set; } 
    [Column("MYMINUTES")] //this does nothing 
    public Minutes MyMinutes { get; set; } 
} 

在生成的SQL中,MyMinutes屬性映射到一個非 - 存在"Extent1"."MyMinutes_Value" ...我想要"Extent1"."MYMINUTES"

除了把我的頭撞在我的桌子上之外,我還能做什麼?

+0

這很奇怪 - 我使用EF和Oracle,不需要手動指定 –

+0

EF 4.3 Code-First? –

回答

0

答案相當簡單,但沒有很好的記錄。據我所知,它不能用屬性來完成。一個行添加到DataContext的OnModelCreating方法:

public class MyDbContext : DbContext { 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.ComplexType<Minutes>().Property(x => x.Value); 
     modelBuilder.Entity<MyEntity>().Property(x => x.MyMinutes.Value).HasColumnName("MYMINUTES"); 
    } 
} 

因此,在方法的第一行設置了複雜類型一般。第二行告訴EF如何映射MyEntity類上的屬性,具體來說。中提琴!

相關問題