我有一个用户模型
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
并将其已映射到已存在的类模型名称,其中UserFriendship
为dbset的哪个元素。
你能帮帮我吗?
总结一下,我已经有UserFriendship
课了。此类包含FrientshipGuidId
(密钥),UserIdGuid
,FriendIdGuid
。
我需要将User
第一类映射到自己。
我想在UserFriendship
课上保存这种关系。
我也希望将Userfriendship
用作dbset。
我有
public DbSet<UserFriendship> Friendships { get;set; }
在我的背景下。
我正在使用FluentApi ToTable
函数来创建一对多关系表。
但是FluentApi代码删除了FriendshipIdGuid
字段。
答案 0 :(得分:0)
这是不可能的。您无法在List<UserFriendship>
课程中使用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);