私にエラーを与えるEFコアIDENTITY_INSERTがOFFに設定されている場合、テーブル 'タグ'のID列に明示的な値を挿入できません

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

質問

DDDパターンを使用した私のプロジェクトは、.NETコアとEFコアによって構築されています。今日、私は、データベースにタグエンティティを追加した後、saveChangesを実行するという質問に遭遇します。しかし、プログラムは例外を投げます: "IDENTITY_INSERTがOFFに設定されているときにテーブル 'タグ'のID列に明示的な値を挿入できません。また、stackoverfolwとgoogleで質問を検索します。私は、 [DatabaseGeneratedAttribute(DatabaseGeneratedOption.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);

追加機能はリポジトリの弁護士です:

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;     
    }

Version of EF core :"Microsoft.EntityFrameworkCore": "1.1.0"

以下の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);

私は数日間それに夢中です、誰が私を助けることができますか?

受け入れられた回答

私は私の質問のためのデモを行うときに私は答えを持って、私はTags.csの行をコメントで解決した:

public TagUseCount TagUseCount { get; set; }

しかし、なぜか分からないのですか?

以下は私の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
    }
}

Supply:私はそれを研究し、私は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);


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ