EF5(代码优先)动态/变量类型名称

时间:2013-07-19 11:19:00

标签: ef-code-first data-annotations

我有一个带有TypeName Specified的数据注释属性的类。一切都完全正常。对于单元测试目的,我想使用SQL Compact数据库而不是sql server数据库。但是,Sql Compact不支持XML数据类型。他们建议您使用ntext。因为xml和ntext映射到System.String类型,所以它根本不会影响我的实体。尽快创建数据库是一件麻烦事。基本上我想在连接到SQL Server时TypeName="XML"和连接到SQL Compact时TypeName="ntext"

public class TechnicalStructure
{
    [Column("StructureAttributes", TypeName = "xml")]
    public string StructureAttributes { get; set; }
}

1 个答案:

答案 0 :(得分:0)

所以我找到了答案。我从受影响的类Property中删除了TypeName属性 - 属性,并覆盖了DbContext类中的OnModelCreate方法。在那里我指定了数据类型。这是一个代码示例:

if (IsInUnitTestMode)
{
modelBuilder.Entity<TechnicalStructure>()
.Property(x => x.StructureType)
.HasColumnType("nvarchar");

modelBuilder.Entity<TechnicalStructure>()
.Property(x => x.StructureAttributes)
.HasColumnType("ntext");
}
else
{
modelBuilder.Entity<TechnicalStructure>()
.Property(x => x.StructureType)
.HasColumnType("char");

modelBuilder.Entity<TechnicalStructure>()
.Property(x => x.StructureAttributes)
.HasColumnType("xml");
}