Entity framework EF4.1代码中的XML数据类型优先

Entity framework EF4.1代码中的XML数据类型优先,entity-framework,entity-framework-4,ef-code-first,ef4-code-only,xml-column,Entity Framework,Entity Framework 4,Ef Code First,Ef4 Code Only,Xml Column,我想使用SQL Serverxml类型作为实体类的列类型 根据需要,可以将此类列映射到字符串类型: public class XmlEntity { public int Id { get; set; } [Column(TypeName="xml")] public string XmlValue { get; set; } } 根据此定义在数据库中正确生成表。还可以创建新的XmlEntity对象 但我尝试从数据库中获取一些实体: var entity = db.XmlE

我想使用SQL Serverxml类型作为实体类的列类型

根据需要,可以将此类列映射到字符串类型:

public class XmlEntity
{
   public int Id { get; set; }

   [Column(TypeName="xml")]
   public string XmlValue { get; set; }
}
根据此定义在数据库中正确生成表。还可以创建新的XmlEntity对象

但我尝试从数据库中获取一些实体:

var entity = db.XmlEntities.Where(e => e.Id == 1).FirstOrDefault();
出现以下错误:

在模型生成过程中检测到一个或多个验证错误 System.Data.Edm.EdmEntityType:EntityType“XElement”未定义键。定义此EntityType的键


问题在于我的包装器属性:

[NotMapped]
public XElement XmlValueWrapper
{
    get { return XElement.Parse(XmlValue); }
    set { XmlValue = value.ToString(); }
}

我没有指定NotMapped属性。

只是为了完整。这里是所有需要的代码,在一个部分

[Column(TypeName = "xml")]
public String XmlContent { get; set; }

[NotMapped]
public XElement InitializedXmlContent
{
    get { return XElement.Parse(XmlContent); }
    set { XmlContent = value.ToString(); }
}

在数据注释中就是这样做的,如果您想使用Fluent API(并使用映射类),那么:

公共部分类XmlEntityMap:EntityTypeConfiguration
{
公共过滤器映射()
{
// ...
属性(c=>c.XmlContent).HasColumnType(“xml”);
忽略(c=>c.XmlValueWrapper);
}
}

如果您通过在DbContext上重写OnModelCreating来使用Fluent API,那么只需使用modelBuilder.Entity()更改这些“this”,这是一个很好的问答,但是如果您在其中包含XElement属性,这个问题会更有意义吗?根据MSDN文章?目前没有XElement属性。所以不清楚唯一的变化是[NotMapped]属性。
public partial class XmlEntityMap : EntityTypeConfiguration<XmlEntity>
{
    public FilterMap()
    {
        // ...
        this.Property(c => c.XmlContent).HasColumnType("xml");

        this.Ignore(c => c.XmlValueWrapper);
    }
}