Сопоставление длинного свойства данных с int в базе данных

c# entity-framework entity-framework-6

Вопрос

Во всех примерах, которые я видел, используются int32 s как идентификаторы. Это не всегда практично в производственных средах. Некоторые из наших баз данных имеют идентификаторы удостоверений , которые находятся в сфере int64 с, поэтому наша практика всегда использовать 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 =]» идентификатора участника в типе «EFConnection.Space» несовместим с «SqlServer.int [Nullable = False, DefaultValue =, StoreGeneratedPattern = Identity]» члена 'spcID' в типе 'CodeFirstDatabaseSchema.Space'.

Как вы сопоставляете тип данных для них с длинной переменной в .NET?

редактировать

Прямо сейчас у меня есть простой тест интеграции, чтобы убедиться, что я могу подключиться:

Property(s => s.ID).HasColumnName("spcID");

Без .HasColumnType("int") , первое Assert проходит, но во втором я получаю InvalidOperationException :

Свойство «ID» в «Пробел» не может быть установлено в значение «System.Int32». Вы должны установить это свойство в ненулевое значение типа «System.Int64».

Принятый ответ

Совместимы типы данных C # и SQL:

Если в вашей таблице есть столбец bigint используйте public long Id { get; set; } если ваш столбец int используется public int Id { get; set; }

SQL

BigInt -9,223,372,036,854,775,808 к 9,223,372,036,854,775,807 INT -2,147,483,648 до 2,147,483,647

C #

долго -9,223,372,036,854,775,808 к 9,223,372,036,854,775,807 ИНТ -2,147,483,648 до 2,147,483,647

Рекомендации:




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему