Тип данных XML в EF 4.1 Code First - PullRequest
       79

Тип данных XML в EF 4.1 Code First

12 голосов
/ 25 августа 2011

Я хотел бы использовать 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();

Произошла ошибка:

Обнаружена одна или несколько ошибок проверки при создании модели System.Data.Edm.EdmEntityType : EntityType ' XElement ' не определен ключ.Определите ключ для этого типа EntityType.

Ответы [ 3 ]

18 голосов
/ 25 августа 2011

Проблема была с моим свойством оболочки:

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

Я не указал атрибут NotMapped .

7 голосов
/ 11 мая 2012

Просто чтобы быть полным.Вот весь необходимый код в одной части.

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

[NotMapped]
public XElement InitializedXmlContent
{
    get { return XElement.Parse(XmlContent); }
    set { XmlContent = value.ToString(); }
}
3 голосов
/ 12 мая 2012

Вот как вы это делаете в аннотациях данных, если вы хотите использовать Fluent API (и использовать класс отображения), тогда:

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

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

Если вы используете Fluent API, переопределяя OnModelCreating в DbContext, просто измените это «this» с помощью modelBuilder.Entity ()

...