我的项目使用 DDD 模式,由 .NET-core 和 EF core 构建。今天,我遇到一个问题是,当我将标签实体添加到数据库时,然后执行saveChanges。但程序抛出异常:“当 IDENTITY_INSERT 设置为 OFF 时,无法在表‘Tags’中插入标识列的显式值”
我也很困惑,我在 stackoverfolw 和 google 上搜索了这个问题。我发现一些解决方案是使用属性
[DatabaseGenerateAttribute(DatabaseGeneeratedOption.Identity)]
,但这对我不起作用。下面是我的代码:
C#//Entity
public class Tags
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TagId { get; set; }
public string TagName { get; set; }
public TagUseCount TagUseCount { get; set; }
public enum Operation
{
None = 0,
Add = 2,
Update = 4
}
}
我的服务律师中使用的功能:
var tagEntity = new Tags { TagName = tag };
var tagId = await _tagRepository.Add(tagEntity);
添加功能是Repository Lawyer:
public async Task<int> Add(Tags tags)
{
try
{
_unitOfWork.Add(tags);
await _unitOfWork.CommitAsync();
return tags.TagId;
}
catch (Exception ex)
{
_logger.LogError(new EventId(), ex, "Error when add Tag!");
}
return 0;
}
UOW添加方法:
TEntity IUnitOfWork.Add<TEntity>(TEntity entity)
{
return base.Set<TEntity>().Add(entity).Entity;
}
EF 核心版本:"Microsoft.EntityFrameworkCore": "1.1.0"
下面的模型构建器:
modelBuilder.Entity<Tags>().ToTable("Tags")
.HasKey(x => x.TagId);
modelBuilder.Entity<TagUseCount>().ToTable("TagUseCount")
.HasKey(x => x.TagId);
modelBuilder.Entity<TagUseCount>().ToTable("TagUseCount")
.HasOne(x => x.tags)
.WithOne(q => q.tagUseCount);
我已经疯狂了几天了,谁能帮助我?
最佳答案
当我为我的问题制作演示时,我得到了答案,我通过注释 Tags.cs 中的行解决了它:
公共(public) TagUseCount TagUseCount { 获取;放; }
但我不知道为什么?
下面是我的 TagUseCount.cs:
public class TagUseCount
{
public int TagId { get; set; }
public int UseCount { get; set; }
public Tags Tag { get; set; }
public enum Operation
{
None = 0,
Increment = 2,
Decrement = 4
}
}
供应: 我研究了一下,发现错误来 self 在 modelBuilder 中编写的代码:
modelBuilder.Entity<Tags>().ToTable("Tags")
.HasKey(x => x.TagId);
modelBuilder.Entity<TagUseCount>().ToTable("TagUseCount")
.HasKey(x => x.TagId);
modelBuilder.Entity<TagUseCount>().ToTable("TagUseCount")
.HasOne(x => x.tags)
.WithOne(q => q.tagUseCount);
当我像这样更改代码时:它会有所帮助。
modelBuilder.Entity<Tags>().ToTable("Tags")
.HasKey(x => x.TagId);
modelBuilder.Entity<Tags>()
.HasOne(x => x.TagUseCount)
.WithOne(y => y.Tags)
.HasForeignKey(z => z.TagId)
modelBuilder.Entity<TagUseCount>().ToTable("TagUseCount")
.HasKey(x => x.TagId);
关于c# - 当 IDENTITY_INSERT 设置为 OFF 时,EF Core 给出错误无法在表 'Tags' 中插入标识列的显式值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42594698/