Във всички примери, които съм виждал, използвайте int32
s като идентификатори. Това не винаги е практично в производствени среди. Няколко от нашите бази данни имат идентификационни номера, които са в сферата на int64
s, така че нашата практика е винаги да използваме long
за нашите ID свойства. Въпреки това SQL Server има по-високи максимални стойности за типа колона int
.
Правя нашето първо доказателство за концепция с Entity Framework версия 6. С long ID
не може да картографира обекта към базата данни.
Използвам Fluent API за цялото си картографиране. В момента това изглежда така за ID:
Property(s => s.ID).HasColumnName("spcID");
Ако добавя .HasColumnType("int")
в края на горното, това ми дава следната грешка:
Посочената схема не е валидна. Грешки: (7,12) : грешка 2019: Посоченото съпоставяне на членове не е валидно. Типът „Edm.Int64[Nullable=False,DefaultValue=]“ на член „ID“ в тип „EFConnection.Space“ не е съвместим с „SqlServer.int[Nullable=False,DefaultValue=,StoreGeneratedPattern=Identity]“ на член 'spcID' в тип 'CodeFirstDatabaseSchema.Space'.
Как картографирате типа данни за тях към дълга променлива в .NET?
Редактиране
В момента имам настроен прост тест за интеграция, за да се уверя, че мога да се свържа:
[TestMethod]
public void TestMethod1() {
using (var context = new Context()) {
Assert.IsTrue(context.Spaces.Any());
Assert.IsTrue(context.Spaces.First().IsActive);
}
}
Без .HasColumnType("int")
първият Assert преминава, но получавам InvalidOperationException
на втория:
Свойството „ID“ на „Space“ не може да бъде зададено на стойност „System.Int32“. Трябва да зададете това свойство на ненулева стойност от тип „System.Int64“.
.HasColumnType(...)
? Спомням си, че използвах EF4 и никога не използвах ограничението, изглежда работеше добре при картографирането на SQLint
къмlong
стойностите на C#. - person Erik   schedule 27.12.2013int
в SQL, използвайтеint
в C#. Ако използватеbigint
в SQL, използвайтеlong
в C#. И двете имат един и същ диапазон на стойност; вижте отговора на Тревър. - person Dave Zych   schedule 27.12.2013int
в базата данни иlong
в C# е неправилна. В най-добрия случай това е проверка за бъдещето на слоя данни. - person krillgar   schedule 27.12.2013long
/bigint
? Тъпо е един да еint
, а другlong
. Какво се случва, когато надхвърлите стойността, коятоint
може да съдържа? Вашият код работи, но се срива, когато се опитате да го запазите в базата данни - и това е проблем. - person Dave Zych   schedule 27.12.2013int
на SQL има много по-голям диапазон. Просто давам причините, които ми бяха посочени. Фактът, че тези причини са неправилни, променя възгледите ми за тях и ще спра да ги защитавам. - person krillgar   schedule 27.12.2013