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

问题描述 投票:0回答:1

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

型号

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);
c# .net entity-framework
1个回答
0
投票

我相信你不能直接从 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
.

© www.soinside.com 2019 - 2024. All rights reserved.