2012-08-30 30 views
7

Önce Entity Framework kod ilkesini kullanıyorum. 100 satır aşmayacak bir tablo var ve ben birincil anahtar olarak byte (tinyint SQL Server) datatype kullanmak istiyorum.Birincil anahtar veri türü olarak bayt kullanımı

Bu defa ne var: Varlık Çerçeve veritabanı oluşturduğunda

[Key] 
public byte Id { get; set; } 

konudur, bu uç üzerindeki otomatik artış satırları verir kimlik şartname özelliğini ayarlayarak değildir.

Ben (SQL Server smallint) Int16 için veri türünü değiştirmek durumunda her şey mükemmel çalışıyor.

Entity Framework'ü otomatik arttırma özelliğini ayarlamak için bir yol var mı, yoksa ilke olarak Entity Framework koduyla birlikte bir bayt olarak kullanılamaz mı?

+5

Veritabanınızı neden böyle kısıtlıyorsunuz? Sadece birkaç satır varsa, eklenen alan zarar vermez. – delnan

+2

@delnan, evet, neden bir varchar (100) ** ';-)' **. Özellikle PK için en uygun kısıtlayıcı veri türünü seçmelisiniz. Bu PK'yi 50 milyon satırlık bir tabloda FK olarak kullanırsanız ve bir dizin eklediğinizde, bir fark olacaktır. Sütun boyutu, disk alanından daha fazlasını etkiler, sadece önbellek ve önemsiz veri türü seçim hatası için ne kadar harcadığınızı düşünün. Ayrıca, uygulamanız çıldırır ve dışarı veya aralık değeri eklemeye çalışırsa, başarısız olur. –

cevap

13

byte türünde anahtar ve kimlik sütunu olarak desteklenir. Kimlik olarak byte birincil anahtarını işaretlemek varsayılan değil. Ama bu varsayılan üzerine yazabilirsiniz:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public byte Id { get; set; } 

(? Daha fazla türde ve belki), Identity seçenek açıkça bir int için gerekli olmayan bir long ve short ayarlanması, ancak SQL bir tinyintbyte (= içindir Sunucu). Bunu test ederek çözdüm ama resmi olarak herhangi bir yerde belgelenemedim.

+0

Mükemmel! Tam olarak aradığım şey! Teşekkür ederim! – user962926

+0

Tanımlanmamış Birincil Anahtar olan bir "kısa" özellik için bu özniteliği "DatabaseGeneratedOption.None" değeriyle kullanmam gerekiyordu. Teşekkürler! – STW

+0

Sadece ek bir Eklenti Gönderi ile yeni bir öznitelik üzerinde çalışmak benim için işe yaramadı. IDENTITY (1,1) eklemedi. En son eklenmeden önce geçişlerimi ve tabloyu silmem gerekiyordu. EF 6.1.3 kullanıyorum. –

İlgili konular