我有一个包含int位掩码的EF4实体(代码优先)。我创建了一个Bitmask结构,以便更容易地使用位掩码(提供bool属性来访问位)。位掩码结构包括用于转换为int和从int转换的重载隐式运算符。
我尝试将属性类型设置为位掩码结构但该值又返回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");
}
这可能吗?如果是这样,我需要做些什么才能让它发挥作用?
答案 0 :(得分:3)
您无法直接映射结构。您必须映射int属性(make setter internal或protected)并提供自定义类型的第二个非映射属性(使用NotMappedAttribute
或Ignore
方法),该属性在内部设置映射的整数属性。
答案 1 :(得分: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;
}
}