gpt4 book ai didi

c# - EF 核心 : The INSERT statement conflicted with the FOREIGN KEY constraint

转载 作者:行者123 更新时间:2023-12-04 13:02:46 26 4
gpt4 key购买 nike

我是 Entity Framework Core 的新手,我对下一种情况有疑问。

我有三个对象,像这样:

TableA {

public int Id {get; set;}
public string Name {get; set;}

public IList<TableA_TableB> TableA_TableBList {get; set;}
}

TableA_TableB {
public int Id {get; set;}

public TableA TableA {get; set;}
public int TableAId {get; set;}

public TableB TableB {get; set;}
public int TableBId {get; set;}
}


TableB {
public int Id {get; set;}
public string Name {get; set;}

public IList<TableA_TableB> TableA_TableBList {get; set;}
}

我正在使用 Fluent Api 来映射关系:
builder
.HasOne(a_b => a_b.TableA)
.WithMany(a => a.TableA_TableBList)
.HasForeignKey(a_b => a_b.TableAId);

builder
.HasOne(a_b => a_b.TableB)
.WithMany(b => b.TableA_TableBList)
.HasForeignKey(a_b => a_b.TableBId);

我的问题是当我尝试在 TableA 中插入一个新值并在 TableA_TablesB 中插入一个新值时,但存在一个存在值 TableB。我使用的代码是:
var entity = (TableA)tableADto; //From controller and convert to TableA using explict operator

entity.TableA_TableBList = new List<TableA_TableBList>();
entity.TableA_TableBList.Add(new TableA_TableB()
{
TableAId = entity.Id,
TableBId = 1 // I put a fix value just to test
});

_tableARepository.Add(entity);
_unitOfWork.Commit();

当我打电话时 SaveChanges() ,显示此错误:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_TableA_TableB_TableB_TableBId".
The conflict occurred in database "tenantteste", table "dbo.TableB", column 'Id".



我试图获取 TableB 值并添加导航属性(TableB 属性)。但是,不是创建关系,而是在我保存时添加了值(value)。

我已经阅读了有关 stackoverflow 的文档和一些问题,我相信使用 FK 应该可以,但它没有用。我不知道我做错了什么。

最佳答案

有几件事是错误的。您的链接表不应该有代理键,例如。这是文档中的多对多示例:

class MyContext : DbContext
{
public DbSet<Post> Posts { get; set; }
public DbSet<Tag> Tags { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PostTag>()
.HasKey(t => new { t.PostId, t.TagId });

modelBuilder.Entity<PostTag>()
.HasOne(pt => pt.Post)
.WithMany(p => p.PostTags)
.HasForeignKey(pt => pt.PostId);

modelBuilder.Entity<PostTag>()
.HasOne(pt => pt.Tag)
.WithMany(t => t.PostTags)
.HasForeignKey(pt => pt.TagId);
}
}

public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }

public List<PostTag> PostTags { get; set; }
}

public class Tag
{
public string TagId { get; set; }

public List<PostTag> PostTags { get; set; }
}

public class PostTag
{
public int PostId { get; set; }
public Post Post { get; set; }

public string TagId { get; set; }
public Tag Tag { get; set; }
}

https://docs.microsoft.com/en-us/ef/core/modeling/relationships#other-relationship-patterns

请注意,链接实体具有 (PostId,TabId) 的复合键。

关于c# - EF 核心 : The INSERT statement conflicted with the FOREIGN KEY constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com