.net 对于EF4属性类型,请使用结构代替基元

.net 对于EF4属性类型,请使用结构代替基元,.net,entity-framework-4,ef4-code-only,.net,Entity Framework 4,Ef4 Code Only,我有一个EF4实体(代码优先),它包含一个int位掩码。我创建了一个位掩码结构,使使用位掩码更容易(提供bool属性来访问位)。bitmask结构包含重载隐式运算符,用于在int和int之间进行转换 我尝试将属性类型设置为bitmask结构,但返回值为0。我知道数据库中的值有一个值,而位掩码在我的单元测试中起作用。我将HasColumnType设置为“INT” 财产 [Required] [Display(Name = "Display Pages Bitmask")] [Column(Name

我有一个EF4实体(代码优先),它包含一个int位掩码。我创建了一个位掩码结构,使使用位掩码更容易(提供bool属性来访问位)。bitmask结构包含重载隐式运算符,用于在int和int之间进行转换

我尝试将属性类型设置为bitmask结构,但返回值为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");
}
模型创建时受保护的覆盖无效(ModelBuilder)
{
builder.Entity()
.Property(m=>m.DisplayPagesBitmask)
.HasColumnType(“INT”);
}

这可能吗?如果是这样,我需要做什么才能让它工作?

您不能直接映射您的结构。必须映射int属性(将setter设置为内部或受保护),并提供第二个未映射属性(使用
NotMappedAttribute
Ignore
方法)在内部设置映射整数属性的自定义类型。

我使用计算属性
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;
        }
    }

这方面有什么消息吗?我有一个结构类型属性,它封装了一个普通的int。自2013年以来有什么变化吗?是的,还要了解如何从类到结构