2012-02-26 9 views
6

Jedna z moich klas encji mogłaby być przechowywana w bazie danych SQL Server jako BIGINT. Moje pytanie brzmi: jak uzyskać kontekst Entity Framework , aby wiedzieć, jak przechowywać i pobierać wystąpienia z mojej klasy encji?Jak określić strukturę obiektu, aby zapisać instancje niestandardowego typu (który może być przechowywany jako skalar)

Więcej szczegółów. Używam Noda Time, które mogą reprezentować (znacznie) szerszy zakres dat niż może datetime SQL lub .NET (I to jest polewa deserowa). Moja klasa jednostek, Happening, jest opakowaniem klasy Instant klasy NodaTime o numerze . Mogę ustawić Happening od długiego i dostać się długo od dzieje się z metodami takimi jak .SetFromLong (długa chwila) i .ToLong().

Obecnie mam swój model działający, zapisując klasy, które zawierają właściwości typu kropki net DateTime o wartości . Jeśli zamiast tego chcę użyć właściwości mojego niestandardowego typu "Happening", jak mogę powiedzieć Entity Framework, jak je zapisać?

Jeśli czytam ten artykuł na temat modelowania i mapowania, czy jestem na dobrej drodze lub brakuje czegoś prostszego?

http://msdn.microsoft.com/en-us/library/bb896343.aspx

Używam Entity Framework 4.

+0

Duplikat: http://stackoverflow.com/questions/5820915/entity-framework-custom-data-type-mapping –

Odpowiedz

6

co polecam robi jest dodanie 2 własności na podmiot A NodaTime i długa, i nie aĹ NodaTime używając [NotMapped] w EF model, a następnie w twojej aktualizacji getter/setter.

tj

public class MyEntity{ 
    public long TimeAsLong{get;set;} 
    [NotMapped] 
    public Happening { 
     get{ 
     return new Happening().SetFromLong(TimeAsLong); 
     } 
     set { 
     TimeAsLong = value.ToLong(); 
     } 
    } 
} 

Efektem tego będzie to, że długo są przechowywane w db, ale można do niego dostęp od klasy poprzez NodaTime

+1

To działało, dziękuję. Nie potrzebuję TimeAsLong, z wyjątkiem tego, aby pomieścić EF, czy to jest dużo, i (w swoim doświadczeniu) czy starasz się wyraźnie wymienić tych członków, TimeAsLongForEF, coś w tym stylu? –

+0

Wszystko, co dotyczy przechowywania i prezentacji, czasami jest lepsze/wydajniejsze w przechowywaniu czegoś innego niż to, w jaki sposób chcesz go użyć, jest to jeden z przykładów. W rzeczywistości nie ma tam setek miejsc, w których powinienem to zrobić, ale zdarza się to czasami, inny przykład, jaki znalazłem, jest przechowywanie pojedynczego Char w bazie danych, wymaga przekonwertowania go na ciąg w twoim modelu zapisu (EF nie rozróżnia między varchar [1] i varchar [2] oba są ciągami). Osobiście nie nazwałbym pola EF, ale to tylko kwestia preferencji. –

+0

Należy również pamiętać, że EF nie przejmuje się tym, czy propery są publiczne, czy nie (jeśli używasz najpierw kodu). Chociaż nadal potrzebujesz sposobu na odwzorowanie go, nawet jeśli jest prywatny. To, co zrobiliśmy, umieszczamy klasę konfiguracji EF w klasie encji, aby mogła ona również uzyskiwać dostęp do pól prywatnych i wykonywać mapowanie. Wadą jest to, że posiadasz klasę odwzorowania w swoim podmiocie, które możesz mieć lub nie mieć problemu. –

Powiązane problemy