Этот вопрос задан довольно много раз, но ни один из ответов не помог. Я вставляю в таблицу (SQL Server 2014, EF 6), и я получаю сообщение об ошибке Cannot insert the value NULL into column 'Id' ... column does not allow nulls.
Столбец Id
установлен в моей БД как первичный ключ И является столбцом идентификации, я проверил три раза, , Я могу вставить без указания идентификатора, использующего T-SQL в SSMS, но EF терпит неудачу. Проходит 0
для значения; Я не понимаю, почему это не принято. Я не использую аннотации данных, я использую только свободное отображение.Невозможно вставить значение NULL в столбец «Идентификатор», столбец является личным и PK
This answer и this answer оба используют аннотации данных и не должны использоваться для этого проекта. Это правильно работало без аннотаций; Я понятия не имею, что изменилось, чтобы вызвать это.
Класс:
namespace Nop.Core.Domain.Common
{
public partial class GenericAttribute : BaseEntity
{
// Id is inherited from BaseEntity
public virtual int EntityId { get; set; }
public virtual string KeyGroup { get; set; }
public virtual string Key { get; set; }
public virtual string Value { get; set; }
}
}
Fluent карта:
namespace Nop.Data.Mapping.Common
{
public partial class GenericAttributeMap : EntityTypeConfiguration<GenericAttribute>
{
public GenericAttributeMap()
{
ToTable("GenericAttribute");
HasKey(ga => ga.Id);
Property(ga => ga.KeyGroup).IsRequired().HasMaxLength(400);
Property(ga => ga.Key).IsRequired().HasMaxLength(400);
Property(ga => ga.Value).IsRequired();
}
}
}
Код для обновления:
prop = new GenericAttribute()
{
EntityId = entity.Id,
Key = key,
KeyGroup = keyGroup,
Value = valueStr
};
// calls _repository.Insert(), which then calls _context.SaveChanges();
InsertAttribute(prop);
Profiler показывает только SELECT
, не INSERT
попыток:
{SELECT
[Extent1].[Id] AS [Id],
[Extent1].[EntityId] AS [EntityId],
[Extent1].[KeyGroup] AS [KeyGroup],
[Extent1].[Key] AS [Key],
[Extent1].[Value] AS [Value]
FROM [dbo].[GenericAttribute] AS [Extent1]}
Я подозреваю, что EF передает сам идентификатор, поэтому он вообще не будет запрашивать СУБД. используйте свободный API с свойством (x => x.Id) .HasDatabaseGeneratedOption (DatabaseGeneratedOption.Identity); чтобы исправить это. – DevilSuichiro
@DevilSuichiro Я просто попробовал это, эта же ошибка бросается. – vaindil
Можете ли вы использовать профайлер и проверить создаваемый SQL? – DrewJordan