2009-09-18 24 views
13

Sadece varlık çerçevesi hakkında biraz bilgi edinmeye başladım ve ORM'lerle çok fazla deneyimim yok.Varlık Çerçevesinde boolean için model özelliğini ayarlayın

Küçük uygulamamda bir tablom var, bu sql server tablosunda PrimaryKey (int) a Name (string) ve Flag (tinyint) dahil olmak üzere birçok sütun var.

Bu tabloya içe aktardığımda, Flags'ın veri tipini bir bayt olarak otomatik olarak atandı. Bu iyi, ama Bayrak gerçekten bir boolean olmalı, bu yüzden

  1. uygulamasını
  2. Giyecektir Boolean Byte Yazım'ı değiştirdi benim Bayrak özelliğini Seçilmiş Haritalama Ayrıntıları tıkladı

    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'.

    012:

Daha sonra bu hata var

MyItem item = new MyItem(); 
item.Flag = true; 

ve veritabanındaki 1'e kaydet Bayrak için bir yolu var mı?

+0

Neden bir boole yerine buna ihtiyacın vardı? –

+0

@JonasStensved sorunu, kullandığım veritabanı tablosunun içinde yanlış veri türü olmasıydı. Tabloyu “byte” yerine “bit” kullanacak şekilde değiştirdikten sonra her şey mükemmel çalıştı. –

cevap

16

Sen veritabanında bit için MyFlag veri türünü değiştirebilir.

+1

Teşekkürler, bit kesinlikle bu durumda kullanmak için doğru veri türü –

+0

Ve ben bir Görünüm kullanıyorsam? –

+0

@Bruno ne demek istiyorsun? Eğer bir EDMX kullanıyorsanız [Bu makale] (http://smehrozalam.wordpress.com/2009/) kullanıyorsanız, İlk Kod'u (DB'den Modele eşleme) kullanıyorsanız, –

2

tinyint için bence kısmi bir sınıf yapmalısınız ve bu alana uygun şekilde okuyan/yazan ayrı bir alan kullanmalısınız. Ancak çerçeve, alanlarını boolean olarak doğru bir şekilde yorumlayacaktır.

Sen .. aşağıda kısmi olarak böyle bir şey deneyebilirsiniz

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

Teşekkürler, tamamen haklısınız, yerine biraz kullanmalıydım. –

+0

Daha önce hiç sorun değil. –

İlgili konular