2

Сначала я использую базу данных EF5 с частичными классами. В моем частичном классе есть свойство, которое содержит n объект, который хранится как столбец в моей базе данных, содержащий данные XML. Я хочу обработать сериализацию/десериализацию этого объекта, когда EF пытается прочитать/записать его с помощью пользовательского getter/setter.Предотвратите создание EF 5 от создания объекта

Возможно ли выставить столбец в моем частичном классе и отобразить его с помощью EF без автоматического создания для него свойства?

т.е.

public SomeObject BigComplexObject { get; set; } // forms etc in my app use this 
public string BigComplexObjectString // when the EF tries to read/write the column, my custom getter/setter kicks in 
{ 
    get { return this.BigComplexObject.ToXmlString(); } 
    set { this.BigComplexObject = new BigComplexObject(value); } 
} 

В настоящее время EF является автоматической генерации элемента для столбца, так что я оставил с ними.

ответ

0

Попробуйте изменить логику. Оставьте EF генерируемого свойство, которое будет заполняться со строкой XML из базы данных:

public string BigComplexObjectString { get; set; } 

Затем выполните следующие действия:

[NotMapped] 
public SomeObject BigComplexObject 
{ 
    get { return new SomeObject(this.BigComplexObjectString); } 
    set { this.BigComplexObjectString = value.ToXmlString(); } 
} 

Не забудьте добавить [NotMapped] поручить EF, чтобы игнорировать это свойство ,

+0

BigComplexObjectString будет в автогенерированном частичном классе. Вы можете поместить свойство BigComplexObject в свой собственный частичный класс (с тем же именем). Я изменил логику в ваших getters/seters, чтобы EF мог отображать данные напрямую, и ваше настраиваемое свойство не должно мешать ему. –

0

Ну, мы используем небольшой трюк для совершенно аналогичного случая ...

Мы используем панель свойств (в файле EDMX) наши ... свойства и добавить что-то в «документации» (резюме или длинное описание) (возможно, это не лучшее место, но в любом случае). Это может быть доступ к вашему T4-файлу.

Таким образом, вы могли бы написать что-то вроде «useXml» в панели свойств, а затем измените TT генерировать нужный код, когда (например, чтобы получить информацию в файле .TT)

if (edmProperty.Documentation != null && edmProperty.Documentation.Summary = "useXml") 
    //generate something special 

Было бы здорово иметь лучшее место для «cusom infos» в edmx, но мы не нашли ничего лучшего на мгновение.

Смежные вопросы