c# - 当 IDENTITY_INSERT 设置为 OFF 时,EF Core 给出错误无法在表 'Tags' 中插入标识列的显式值

标签 c# asp.net-core entity-framework-core

我的项目使用 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/

相关文章:

c# - EF Core 3.0 SumAsync 触发聚合函数异常

c# - UWP Apps 中的模拟框架

asp.net-core - 使用具有目标框架名称(如 #if !NETSTANDARD1_6)的代码编译 netcoreapp1.0

c# - ASP.NET Core 2.0 无法检查用户是否在 Razor View 或 Controller [authorize] 注释中正确扮演角色

c# - Entity Framework Core 不返回刷新数据

c# - 处理 DbContext.Entry 时尝试基于 .NET EF Core 对通用存储库进行单元测试失败

c# - 使用 Unity.Mvc5 注入(inject)依赖项时的多个 Controller 构造函数

c# - 使用自定义属性映射属性

c# - 是否可以以编程方式创建哈希规则?

c# - 将 Autofac 与 ASP.Net Core 3.1 通用主机 "Worker Service"应用程序一起使用