如何使用fluentApi来管理嵌套关系
本文关键字:嵌套 关系 管理 何使用 fluentApi | 更新日期: 2023-09-27 17:59:00
我有一个用户模型
public class User {
public Guid IdGuid {get;set;}
public string Name {get;set;}
public virtual List<User> Friends {get;set;}
}
我有第二种型号的
public class UserFriendship{
public Guid FriendShipIdGuid {get;set;}
public Guid UserIdGuid {get;set;}
public Guid FriendIdGuid {get;set;}
}
我在上下文中有FluentApi代码OnModelcreating
。
modelBuilder.Entity<User>().HasMany(u => u.Friends).WithMany().Map(c => {
c.MapLeftKey("UserIdGuid");
c.MapRightKey("FriendIdGuid");
c.ToTable("UserFriendship");
});
问题:我已经有了一个UserFriendship
类模型。我想创建用户和这个模型之间的关系。我正在用FluentApi做这件事。
但在执行FluentApi代码后,FriendShipIdGuid
从UserFriendship
表中删除。
我需要为Users创建一对多关系,并将其保存到表UserFriendship
中,并将已存在的类模型名称映射到dbset的UserFriendship
哪个元素。你能帮我吗?
总之,我已经上了UserFriendship
课。该类包含FrientshipGuidId
(密钥)、UserIdGuid
、FriendIdGuid
。我需要将User
类一对多映射到它自己。我想把这个关系保存在UserFriendship
类上。我还想使用Userfriendship
作为dbset。
我有
public DbSet<UserFriendship> Friendships { get;set; }
在我的背景下。
我正在使用FluentApi ToTable
函数创建一对多关系表。但是FluentApi代码删除了FriendshipIdGuid
字段。
这是不可能的。您也不能在User
类中使用List<UserFriendship>
,因为有时User是用户,有时User是朋友,除非您的UserFriendship
表中有重复项,如下所示:
Friendship table: |
----------------------------
User / Friend
-------------
A / B
B / A
-------------
首先更改User
和UserFriendship
类如下:
class UserFriendship
{
public Guid FriendShipIdGuid {get;set;}
public Guid UserIdGuid {get;set;}
public Guid FriendIdGuid {get;set;}
public User User {get;set;}
public User Friend {get;set;}
}
class User
{
public Guid IdGuid {get;set;}
public string Name {get;set;}
// Only if you will allow duplicates in UserFriendship
public virtual List<UserFriendship> Friendships {get;set;}
}
我不记得Fluent API的确切语法/方法,但你会想到:
modelBuilder.Entity<User>()
.HasKey(u => u.IdGuid)
.ToTable("User");
modelBuilder.Entity<UserFriendship>()
.HasKey(uf => uf.FriendShipIdGuid)
.ToTable("UserFriendship");
modelBuilder.Entity<UserFriendship>()
.HasRequired(uf => uf.User)
.WithMany(u => u.Friendships) // Only if you allow duplicates
//.WithMany() // Otherwise
.HasForeignKey(uf => uf.UserIdGuid);
modelBuilder.Entity<UserFriendShip>()
.HasRequired(uf => uf.Friend)
.WithMany()
.HasForeignKey(uf => uf.FriendIdGuid);