Подтвердить что ты не робот

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 все еще говорит, что моя модель устарела, и я не могу повторно засеять базу данных, чтобы получить ее "идеально".

Любая помощь будет высоко оценена.

Спасибо,

Бенджамин

4b9b3361

Ответ 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; }