[英]How to use fluentApi to manage nested relations?
我有一个用户模型
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
表。
我需要创建一个为用户一对多的关系,并将其保存到表UserFriendship
和地图,它已经与现有的类模型名UserFriendship
dbset的哪个元素。 你能帮我吗 ?
总而言之,我已经有UserFriendship
类。 此类包含FrientshipGuidId
(键), UserIdGuid
和FriendIdGuid
。 我需要将User
类一对多地映射到自身。 我想将此关系保存在UserFriendship
类上。 我也想将Userfriendship
用作dbset。
我有
public DbSet<UserFriendship> Friendships { get;set; }
就我而言。
我正在使用FluentApi ToTable
函数创建一对多关系表。 但是FluentApi代码删除了FriendshipIdGuid
字段。
这是不可能的。 您不能在User
类中使用List<UserFriendship>
,因为有时用户是用户,而有时用户是朋友,除非您在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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.