Przykład: Załóżmy, że mam te trzy klasy. Foo
jest prawidłową jednostką Entity Framework z DbSet, ale chcę, aby mój DbContext EF był nieświadomy Bar
i Baz
, ponieważ oznaczyłem właściwość Foo's Bar z podanym atrybutem SerializedColumn
. Stosując ten atrybut, chcę, aby EF serializował instancję paska z jego Bazami w jedno pole ciągu i przezroczyście deserializował Bar do obiektu Bar, gdy Foo jest zmaterializowane przez EF.Utrwalanie i pobieranie seryjnej właściwości encji za pomocą kodu Entity Framework 6.1 pierwszy kod
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; }
// ..
}
Więc kolumny tabeli Foo wyglądałby następująco:
[Id] [uniqueidentifier] NOT NULL
[Bar] [nvarchar](max) NULL
I kiedy kwerendy Foo
wrócę jednej z posesji Bar
już rozszeregować. Kiedy wstawiam lub aktualizuję Foo
właściwość zostanie spersonalizowana przez EF bez konieczności myślenia o tym. Jedyne co muszę zrobić, to dodać atrybut atrybutu [SerializeColumn]
do właściwości.
Cele:
- Ja nie koniecznie szukasz pełnego rozwiązania dmuchanego (chociaż chciałbym go przyjąć), ale dla wytycznych dotyczących gdzie wskoczyć do rurociągu EF i jak to zrobić. TO ZNACZY. jakie klasy EF, konfiguracje, konwencje itp. muszę wziąć pod uwagę?
- Chcę, aby migracje były generowane tak, jak można by oczekiwać. Co oznacza, że nie chcę, aby moja właściwość
Bar
zmieniła się w pole "Bar_Id", które wskazuje na tabelę "Bar". Zamiast tego chcę pole "Bar"nvarchar(max)
, które będzie zawierać serializowaną wersję obiektuBar
. Jeśli to po prostu nie jest możliwe, powiedz to w swojej odpowiedzi.
Uwagi:
- Pomysł ten przyszedł po obejrzeniu wideo Building Applications with Entity Framework 6 przez Rowana Millera.
ComplexType
nie zaspokaja moich potrzeb. Potrzebuję głębokiej serializacji i nie muszę być w stanie filtrować ani sortować żadnych właściwości tego, co zostało serializowane.- Mam zamiar serializować z biblioteką Jetsona Newtonsoft, ale jak serializacja się nie ma naprawdę znaczenia.
coś takiego? http://stackoverflow.com/questions/14779740/can-i-embed-an-object-in-an-ef-entity-serialize-on-save-deserialize-on-access – MutantNinjaCodeMonkey
@MutantNinjaCodeMonkey Zrobiłem to w przeszłość i to działa, ale staram się, aby upór był całkowicie przejrzysty. Jest to tylko jedna właściwość 'Bar' z wprowadzonym' SerializeColumnAttribute' i żadna właściwość 'BarSerialized'. –
Na pewno nie jest to możliwe w EF6. To, czego naprawdę potrzebujesz, to konwerter typu klienta.Ta funkcja jest [planowana] (https://github.com/aspnet/EntityFramework/issues/242) dla EF7, ale jeszcze nie została wdrożona. – DavidG