2011-01-13 88 views
5

我有一個EF4實體(代碼優先),包括一個int位掩碼。我已經創建了一個Bitmask結構來使得位掩碼更容易工作(提供布爾屬性來訪問這些位)。位掩碼結構包含用於轉換爲int的隱式運算符。使用結構代替原始的一個EF4屬性類型

我嘗試設置屬性類型的位掩碼結構,但該值回來爲0。我知道在數據庫中的值具有值和掩碼在我的單元測試工作。我將HasColumnType設置爲「INT」。

酒店...

[Required] 
[Display(Name = "Display Pages Bitmask")] 
[Column(Name = "fDisplayPagesBitmask")] 
public DisplayPagesBitmask DisplayPagesBitmask { get; set; } 

從上下文對象......

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    builder.Entity<Website>() 
     .Property(m => m.DisplayPagesBitmask) 
     .HasColumnType("INT"); 
} 

這可能嗎?如果是這樣,我需要做些什麼才能使其發揮作用?

回答

3

你不能將結構直接映射。你必須映射INT財產(使二傳手內部或保護),並提供第二非對應的屬性(使用NotMappedAttributeIgnore方法)在內部設置映射整數屬性自定義類型。

+4

請問您可以添加一個示例代碼來說明如何做到這一點? – jonas 2013-04-04 13:21:52

0

我用一個計算的屬性struct來獲得與Entity Framework 6中的SQLite一起使用的屬性。 保護爲ForSQLite屬性的訪問修飾符對我無效。即使他們應該是私人的或在我眼中受到保護。

public Boolean ZystostatikaForSQLite { 
     get; 
     set; 
    } 
    public Boolean ImmunsupressivaForSQLite { 
     get; 
     set; 
    } 
    public Boolean AntikoagolanzienForSQLite { 
     get; 
     set; 
    } 
    public Boolean GlucokortikoideForSQLite { 
     get; 
     set; 
    } 
    // 4 Kategorien der Arzneimittel: Zytostatika, Immunsupressiva, Antikoagolanzien, Glucokortikoide 
    public struct PharmaceuticalCategories { 
     public Boolean Zystostatika; 
     public Boolean Immunsupressiva; 
     public Boolean Antikoagolanzien; 
     public Boolean Glucokortikoide; 
    }; 
    public PharmaceuticalCategories medicineTaken { 
     get { 
      PharmaceuticalCategories pc = new PharmaceuticalCategories(); 
      pc.Zystostatika = this.ZystostatikaForSQLite; 
      pc.Immunsupressiva = this.ImmunsupressivaForSQLite; 
      pc.Antikoagolanzien = this.AntikoagolanzienForSQLite; 
      pc.Glucokortikoide = this.GlucokortikoideForSQLite; 

      return pc; 
     } 
     set { 
      this.ZystostatikaForSQLite = value.Zystostatika; 
      this.ImmunsupressivaForSQLite = value.Immunsupressiva; 
      this.AntikoagolanzienForSQLite = value.Antikoagolanzien; 
      this.GlucokortikoideForSQLite = value.Glucokortikoide; 
     } 
    } 
相關問題