Entity Framework 4.1 с кодовым ключом KeyAttribute как столбец не идентичности
У меня проблема с кодовой первой моделью. Данные теперь находятся в базе данных, поэтому я не могу повторно засеять базу данных с помощью класса DropCreateDatabaseIfModelChanges, но мне нужно изменить одну таблицу, чтобы столбец bigint не был IDENTITY (1,1). Мне удалось это сделать с помощью SSMS, но теперь мой EF-код говорит об устаревании.
Это код для таблицы:
public class Vote {
[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long FacebookUserId { get; set; }
[Required]
public Entity Entity { get; set; }
}
Итак, я изменил схему таблицы и свою модель (которая, как я думал, была ее отражением, но я, очевидно, ошибаюсь), но EF все еще говорит, что моя модель устарела, и я не могу повторно засеять базу данных, чтобы получить ее "идеально".
Любая помощь будет высоко оценена.
Спасибо,
Бенджамин
Ответы
Ответ 1
Попробуйте добавить это в свой OnModelCreating
:
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
Это должно устранить исключение, что модель устарела, но до этого времени вы всегда должны вручную синхронизировать модель и базу данных.
Ответ 2
Использование аннотации данных:
public class Customer
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CustomerID { get; set; }
}
Использование свободного API:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Property(c => c.CustomerID).HasDatabaseGeneratedOption(null);
base.OnModelCreating(modelBuilder);
}
Ответ 3
ссылаясь на этот пост...
Кажется, что инфраструктура сущностей предполагает по умолчанию, что вы вставляете в столбец идентификаторов.
чтобы решить эту попытку
modelBuilder.Entity<BOB>()
.HasKey(p => p.Id)
.Property(p => p.Id)
.StoreGeneratedPattern = StoreGeneratedPattern.None;
builder.Entity<BOB>().MapSingleType().ToTable("BOB");
или украсить свой ключ в POCO...
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public Int64 PolicyID { get; set; }