.net 在EF上创建与中间表关系一对一的导航属性

j2cgzkjk  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(140)

我想通过外键在两个直接不相关的表之间创建关系。但是我没有成功。有人知道这在实体框架中是否可能以及如何解决?
型号

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);
ddrv8njm

ddrv8njm1#

我相信你不能直接从Commentary调用UserAccount,Commentary和UserAccount之间没有直接的关系,你拥有的关系是Commentary-〉User-〉UserAccount。
因此,您必须使用modelBuilder两次,以创建两个关系。从CommentaryUser,然后从UserUserAccount

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类中。在Commentary类中不需要UserAccount
现在,如果你有一个Commentary对象,你可以像这样访问UserUserAccountCommentary.User.UserAccount

相关问题