Entity Framework Non Identity-не удается вставить значение NULL в столбец "ID"
У меня есть таблица с первичным ключом ID, это поле не является столбцом identity. Моя миграция для Entity Framework 6 является
CreateTable(
"dbo.Action",
c => new
{
ID = c.Int(nullable: false, identity: false),
ActionName = c.String(maxLength: 50),
})
.PrimaryKey(t => t.ID);
Все это выглядит довольно прямолинейно для меня. Затем у меня есть метод для посева некоторых данных:
public static void Seed(this DbSet<Action> entitySet)
{
MainContext dbCtx = DataRepositoryBase<Action>.GetContext(entitySet) as MainContext;
if (dbCtx != null)
{
entitySet.Add(new Action()
{
ID = 1,
ActionName = "Test"
});
}
}
Именно в этот момент я получаю ошибку
"невозможно вставить значение NULL в столбец 'ID', таблица ' dbo.Действие';
столбец не допускает нулей. Вставить не удается.r n заявление было
прекращено "
Как вы можете видеть, я я четко значение для столбца ID. Мое подозрение заключается в том, что основа сущности ожидает идентификатор столбца идентификаторов
Класс сущностей очень прост
[DataContract]
public class Action
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string ActionName { get; set; }
}
2 ответов:
Ваша миграция только создает таблицу в базе данных, но не сообщает Entity Framework, что свойство ID не является столбцом
IDENTITY. EF выбирает свойство ID, если вы не указываете ему, какое свойство использовать в качестве первичного ключа, но вам также нужно сказать EF, что это не столбец идентификаторов, сделайте это с помощью атрибутаDatabaseGenerated:[DataContract] public class Action { [DataMember] [Key] //This isn't technically needed, but I prefer to be explicit. [DatabaseGenerated(DatabaseGeneratedOption.None)] public int ID { get; set; } [DataMember] public string ActionName { get; set; } }
Ошибка связана с тем, что поля name Id должны быть первичным ключом и идентификатором.
Когда оператор EF generate insert не генерирует значение для этого поля.Вы можете исправить это с помощью
[DataContract] public class Action { [DataMember] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int ID { get; set; } [DataMember] public string ActionName { get; set; } }
Comments