2009-11-10 6 views
19

Chciałbym wiedzieć, czy istnieje sposób na wykluczenie niektórych pól z bazy danych? Na przykład:Wyklucz pole/właściwość z bazy danych za pomocą Entity Framework 4 i Code-First

public class Employee 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string FatherName { get; set; } 

    public bool IsMale { get; set; } 
    public bool IsMarried { get; set; } 

    public string AddressAs { get; set; } 
} 

Jak mogę wykluczyć pole AddressAs z bazy danych?

+0

Możliwy duplikat [Ignorowanie właściwość klasy w Entity Framework 4.1 kod pierwszy] (http://stackoverflow.com/questions/10385248/ignoring-a-class-property-in-entity-framework-4-1-code- first) –

Odpowiedz

20

W obecnej wersji to jedyny sposób, aby wykluczyć właściwość jest wyraźnie odwzorować wszystkie inne kolumny:

builder.Entity<Employee>().MapSingleType(e => new { 
    e.Id, 
    e.Name, 
    e.FatherName, 
    e.IsMale, 
    e.IsMarried 
}); 

Ponieważ AddressAs nie odwołuje go nie jest częścią danej jednostki/Database.

Zespół EF rozważa dodając coś takiego:

builder.Entity<Employee>().Exclude(e => e.AddressAs); 

Proponuję powiedzieć komentarz na blogu EFDesign zostawić, prosząc tę ​​funkcję :)

Hope this helps

Alex

+3

Uświadomiłem sobie, że jedynym sposobem na zrobienie tego od dzisiaj jest sposób, o którym wspomniałeś. Opublikowalem to na blogu EFDesign dawno temu: http://blogs.msdn.com/efdesign/archive/2009/10/12/code-only-further-enhancements.aspx – Yogesh

+0

Byłoby prawdziwą premią, gdyby dodali .Exclude() ' – Zapnologica

+0

Czy istnieje sposób na wykluczenie określonego pola ze wszystkich klas w modelu przy użyciu szablonu T4? –

30

Wiem, że to stare pytanie, ale na wypadek, gdyby ktoś (jak ja) doszedł do niego z wyszukiwarki h ...

Teraz jest to możliwe w ramach 4.3 encji, aby to zrobić. Można by to zrobić tak:

builder.Entity<Employee>().Ignore(e => e.AddressAs); 
+2

Lub w VB 'builder.Entity (of Employee) .Ignore (Funkcja (e) e.AddressAs)' –

+3

Czy to byłoby globalne? Mam na myśli, co jeśli chcę to zrobić tylko dla tego jednego połączenia? Czy mogę to powtórzyć? – vbullinger

+0

Tak, nadal przydatne. właśnie uratowałeś mi 40 minut badań. –

Powiązane problemy