Платформа сущностей с целочисленным первичным ключом, но не с автоматическим int, не передается в базу данных - PullRequest
2 голосов
/ 06 августа 2010

Вот таблица и код

public class Person {
    [Key] public int ID {get;set;}
    public string Name {get;set;}
}

var owner = new Person() { ID = 1, Name = "Owner" };
db.People.Add(Person);
db.SaveChanges();

Метод SaveChanges не добавляет идентификатор в sql, поэтому я получаю следующий SQL-запрос

exec sp_executesql N'insert [dbo].[People]([Name])
values (@0)
select [ID]
from [dbo].[People]
where @@ROWCOUNT > 0 and [ID] = scope_identity()',N'@0 varchar(50),@0='Owner'

Вместо ожидаемой вставкитакже передается оператор с идентификатором.

Есть ли еще один атрибут, который мне нужен, чтобы убедиться, что идентификатор передается как часть запроса?

Я уверен, что он будет задан, но этоне-автоинкремент по назначению.

Ответы [ 2 ]

2 голосов
/ 12 января 2016

в EF 5, ответ

this.HasKey(t => t.UserID)
    .Property(p => p.UserID)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

также DatabaseGeneratedOption.Computed используется, когда вычисления полей выполняются внутри самого сервера sql.

0 голосов
/ 06 августа 2010

Как ни странно, вот ответ для любого, кто может столкнуться с этой проблемой.

modelBuilder.Entity<Person>()
            .HasKey(p => p.ID)
            .Property(p => p.ID)
            .StoreGeneratedPattern = StoreGeneratedPattern.Identity;

Надеюсь, это кому-то поможет.

...