Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为EF Core 5中自动生成的多对多表定义DbSet?_C#_Entity Framework Core - Fatal编程技术网

C# 如何为EF Core 5中自动生成的多对多表定义DbSet?

C# 如何为EF Core 5中自动生成的多对多表定义DbSet?,c#,entity-framework-core,C#,Entity Framework Core,EF Core 5完善了多对多关系,我们不需要为“关系表”定义实体,EF Core 5将在内部自动生成该表 那么,如何定义用于引用do CRUD的DbSet e、 g 所以不 公共数据库集t1t2{get;set;} 当我向T1T2添加记录时,如何获取表T1T2的引用? 或者我还有其他方法吗?默认情况下,EF Core使用所谓的for join实体。简单地说,它是具有唯一名称的Dictionary类型,具有命名为“indexer”的属性 一旦知道名称,就可以为它定义/访问DbSet。您可以

EF Core 5完善了多对多关系,我们不需要为“关系表”定义实体,EF Core 5将在内部自动生成该表

那么,如何定义用于引用do CRUD的DbSet

e、 g

所以不

公共数据库集t1t2{get;set;}
当我向T1T2添加记录时,如何获取表T1T2的引用?
或者我还有其他方法吗?

默认情况下,EF Core使用所谓的for join实体。简单地说,它是具有唯一名称的
Dictionary
类型,具有命名为“indexer”的属性

一旦知道名称,就可以为它定义/访问
DbSet
。您可以通过使用新的
Set
方法重载和name参数来实现这一点:

public DbSet<Dictionary<string, object>> t1t2 => Set<Dictionary<string, object>>("T1T2");
然后要么

t1.T2.Add(t2);


将执行所需的操作(确保初始化实体的集合导航属性以避免空引用异常,但这与正常的一对多关系没有区别)。

如果需要联接表对象,则需要定义它。要在jt中添加或删除元素,您必须从t1列表中删除t2实体(反之亦然),您自己提供了一个链接来说明如何执行此操作。从那里复制代码。@lsitar,我编辑了这篇文章。t1有t2 list ref,t2有t1 list ref。如何在t3中添加元素?@Alexander Petrov抱歉,我没有找到相关代码,它定义了t3实体的代码,我认为这不是预期的。@MingTong请将您的问题包括实体类的源代码和上下文类的源代码。酷,我可以更改名称“T1T2”吗在代码中,公共DbSet t1t2=>Set(“t1t2”);它只是连接了两个表名,我想重新定义它。这都是默认值(使用实体/属性名)。如果需要更改某些内容,则必须使用
UsingEntity
luent API重载之一。这里和这里的示例当我尝试添加数据时,它显示无法跟踪类型为“T1T2(Dictionary)”的实例,因为它没有主键。只能跟踪具有主键的实体类型。T1T2表有主键合理吗?在我添加一个“id”作为主键后,它显示无法跟踪实体类型“T2”的实例,因为已经在跟踪另一个具有{id2}相同键值的实例。(1)不需要定义PK,因为EF Core已经定义了一个包含2个FK的复合PK。同样,直接使用隐式连接实体的方法很容易出错,因为您需要确切了解EF核心约定行实体/属性名称和类型。我已经在其中一个链接中对它们进行了解释,所以在这里重复是没有意义的。每个SO帖子都是针对一个具体问题。
public DbSet<T1T2> t1t2{ get; set; }
public DbSet<Dictionary<string, object>> t1t2 => Set<Dictionary<string, object>>("T1T2");
context.t1t2.Add(new Dictionary<string, object> { ["T1id1"] = some_id1, ["T2id2"] = some_id2 });
var t1 = context.t1.Find(some_id1);
var t2 = context.t2.Find(some_id2);
t1.T2.Add(t2);
t2.T1.Add(t1);