2011-01-13 58 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; 
     } 
    } 
相关问题