2009-09-18 2 views
13

Właśnie zaczynam się uczyć nieco o strukturze encji i nie mam dużego doświadczenia z ORM-ami.Ustaw właściwość modelu na boolean w Entity Framework

W mojej małej aplikacji mam jedną tabelę, ta tabela serwera sql ma kilka kolumn, w tym PrimaryKey (int) a Name (string) i Flag (tinyint).

Po zaimportowaniu tej tabeli automatycznie przypisano typ danych flagi jako bajt. To jest w porządku, ale flaga powinna być naprawdę logiczna, więc

  1. kliknięciu na szczegóły mapowania
  2. Wybrane moją własność Oznacz
  3. zmieniony typ z Byte do Boolean
  4. Przebudowany aplikację

potem dostał ten błąd:

Error 2019: Member Mapping specified is not valid. The type 'Edm.Boolean[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.MyItem' is not compatible with 'SqlServer.tinyint[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.Store.MyItem'.

Czy istnieje sposób, aby mieći mieć flaga zapisać w bazie danych 1?

+0

Dlaczego miałbyś potrzebować tego zamiast bota? –

+0

@ JonasStensved problem polegał na tym, że tabela bazy danych, z której korzystałem miała nieprawidłowy typ danych. Kiedyś zmieniłem tabelę, aby użyć "bitu" zamiast "bajtu", wtedy wszystko działało idealnie. –

Odpowiedz

16

Można zmienić typ danych MyFlag do bit w bazie danych.

+1

Dzięki, bit jest z pewnością poprawnym typem danych do użycia w tej sytuacji. –

+0

A co, jeśli używam widoku? –

+0

@Bruno co masz na myśli? –

2

Myślę, że dla tinyint będziesz musiał zrobić częściową klasę i użyć osobnego pola, które odpowiednio odczytuje/zapisuje do tego pola. Jednak framework poprawnie interpretuje pola bit jako boolean.

Można spróbować coś takiego jak poniżej częściowe ..

public partial class MyItem 
{ 
    public bool FlagBool 
    { 
     get { return Flag == 1; } 
     set { Flag = value ? 1 : 0; } 
    } 
} 
+0

Dzięki, masz całkowitą rację, powinienem był użyć nieco zamiast tego. –

+0

Nie ma problemu, przeżyłem to wcześniej. –