Пример: Допустим, у меня есть эти три класса. Foo
— это надлежащая сущность Entity Framework с DbSet, тогда как я хочу, чтобы мой EF DbContext не знал о Bar
и Baz
, потому что я пометил свойство Foo Bar с помощью моего созданного атрибута SerializedColumn
. Применяя этот атрибут, я хочу, чтобы EF сериализовал экземпляр Bar с его базами в одно строковое поле и прозрачно десериализовал Bar в объект Bar, когда EF материализует Foo.
public class Foo
{
public Guid Id { get; set; }
[SerializedColumn]
public Bar Bar { get; set; }
// ..
}
public class Bar
{
public string Name { get; set; }
public Baz[] Baz { get; set; }
// ..
}
public class Baz
{
public string Name { get; set; }
// ..
}
Таким образом, столбцы таблицы Foo будут выглядеть так:
[Id] [uniqueidentifier] NOT NULL
[Bar] [nvarchar](max) NULL
И когда я запрашиваю Foo
, я получаю ответ с уже десериализованным свойством Bar
. Когда я вставляю или обновляю Foo
, свойство Bar
сериализуется EF, и мне не приходится об этом думать. Единственное, что мне нужно сделать, это добавить атрибут [SerializeColumn]
к свойствам.
Цели:
- Я не обязательно ищу полномасштабное решение (хотя я бы его принял), но хочу узнать, где перейти к конвейеру EF и как это сделать. т.е. какие классы EF, конфигурации, соглашения и т. д. мне нужно принять во внимание?
- Я хочу, чтобы миграции генерировались так, как можно было бы ожидать. То есть я бы не хотел, чтобы мое свойство
Bar
превратилось в поле «Bar_Id», указывающее на таблицу «Bar». Вместо этого я хочу полеnvarchar(max)
"Bar", которое будет содержать сериализованную версию объектаBar
. Если это просто невозможно, укажите это в своем ответе.
Примечания:
- Идея возникла после просмотра видеоролика Роуэна Миллера Создание приложений с помощью Entity Framework 6. .
ComplexType
не удовлетворяет мои потребности. Мне нужна глубокая сериализация, и мне не нужно фильтровать или сортировать какие-либо свойства того, что было сериализовано.- Я планирую сериализацию с помощью библиотеки JSON от Newtonsoft, но то, как происходит сериализация, на самом деле не имеет значения.
Bar
с моим выдуманнымSerializeColumnAttribute
и отсутствие свойстваBarSerialized
. - person Jeremy Cook   schedule 25.11.2015