2017-03-04 12 views
1

DDDパターンを使用するプロジェクトは、.NETコアとEFコアで構築されます。今日、私は、データベースにタグエンティティを追加した後、saveChangesを実行するという質問に遭遇します。 "IDENTITY_INSERTがOFFに設定されていると、テーブル 'タグ'のID列に明示的な値を挿入できません。 また、私はstackoverfolwとgoogleで質問を検索して困惑しています。私はいくつかの解決策は、属性 [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]を使用しているが、私のために動作しないことがわかりました。ここでは以下の私のコードは次のとおりです。エラーが発生するEFコアIDENTITY_INSERTがOFFに設定されている場合、テーブル 'タグ'のID列に明示的な値を挿入できません。

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

ModelBuilderの下の3210

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

私は私を助けることができる日のカップルのためにそれで狂ったのですか?私は私の質問のためのデモを作るとき

+2

コードのどこかに「TagId」を設定していますか? UOWの 'Add'メソッドも見ることができますか?また、どのバージョンのEFコアを使用していますか?私たちはおそらく助けることができますが、[mcve]、つまりコピー/ペーストと実行が可能なものが必要です。 –

+0

私は私の質問のためにデモを作成するときに答えを得ました。私はTags.csのコメント行でそれを解決しました。 'public TagUseCount TagUseCount {get;セット; } '、しかし私はなぜか分からないのですか? – doublnt

答えて

2

が、私は答えを得た、私はコメントで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 
    } 
} 

電源: 私はそれを調査し、私はエラーが私は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); 
関連する問題