我想通过外键在两个直接不相关的表之间创建关系。但我没有成功。谁知道这在实体框架中是否可行以及如何解决?
型号
C#
class Commentary {
public int Id {get;set; }
public int UserId {get; set;}
public User User {get;set;}
public UserAccount UserAccount {get;set;}
}
class User {
public int Id {get;set; }
public int UserAccountId {get; set;}
public UserAccount UserAccount {get;set;}
}
class UserAccount {
public int Id { get; set; }
public ICollection<User> Users {get; set;}
}
// Relationship
modelBuilder.Entity<TarefaComentario>()
.HasOne(c => c.UserAccount)
.WithMany()
.HasForeignKey(c => c.User.UserAccountId) // this generates error
.HasPrincipalKey(ua => ua.Id);
我相信你不能直接从 Commentary 调用 UserAccount。 Commentary 和 UserAccount 之间没有直接关系。你的关系是 Commentary->User->UserAccount.
所以,你必须使用
modelBuilder
两次,来创建两个关系。从Commentary
到User
,然后从User
到UserAccount
.
modelBuilder.Entity<Commentary>()
.HasOne(c => c.User)
.WithMany(u => u.Commentaries)
.HasForeignKey(c => c.UserId);
modelBuilder.Entity<User>()
.HasOne(u => u.UserAccount)
.WithMany(ua => ua.Users)
.HasForeignKey(u => u.UserAccountId);
您还必须将
public ICollection<Commentary> Commentaries {get; set;}
添加到您的 User
课程中。并且不需要UserAccount
里面Commentary
类。
现在,如果你有一个
Commentary
对象,你可以像这样访问User
和UserAccount
:Commentary.User.UserAccount
.