12

エンティティ クラスの列の型としてSQL Server のxml型を使用したいと考えています。

このスレッドによると、そのような列を文字列型にマップすることが可能です:

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();

エラーが発生します:

モデルの生成中に 1 つ以上の検証エラーが検出されました System.Data.Edm.EdmEntityType : EntityType ' XElement ' にキーが定義されていません。この EntityType のキーを定義します。

4

3 に答える 3

18

問題は私のラッパープロパティにありました:

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

NotMapped属性を指定していません。

于 2011-08-25T13:05:34.917 に答える
8

完成するだけです。必要なすべてのコードを 1 つの部分にまとめます。

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

[NotMapped]
public XElement InitializedXmlContent
{
    get { return XElement.Parse(XmlContent); }
    set { XmlContent = value.ToString(); }
}
于 2012-05-11T13:37:36.297 に答える
3

Fluent API を使用する (およびマッピング クラスを使用する) 場合は、データ注釈で次のようにします。

public partial class XmlEntityMap : EntityTypeConfiguration<XmlEntity>
{
    public FilterMap()
    {
        // ...
        this.Property(c => c.XmlContent).HasColumnType("xml");

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

DbContext で OnModelCreating をオーバーライドして Fluent API を使用する場合は、これらの「this」を modelBuilder.Entity<XmlEntity>() で変更するだけです。

于 2012-05-12T16:22:41.130 に答える