我有三個物體,如下所示:
public class Application
{
[Key]
public int ApplicationId { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; }
}
public class User
{
[Key]
public int UserId { get; set; }
public string UserName { get; set; }
public virtual ICollection<Application> Applications { get; set; }
}
加入物體
public class UserApplication
{
public int UserId { get; set; }
public int ApplicationId { get; set; }
[ForeignKey("UserId")]
public User User { get; set; }
[ForeignKey("ApplicationId")]
public Application Application { get; set; }
}
OnModelCreating 部分 =>
modelBuilder.Entity<User>()
.HasMany(x => x.Applications)
.WithMany(x => x.Users)
.UsingEntity(ua => ua.ToTable("UserApplication"));
modelBuilder.Entity<UserApplication>()
.HasKey(a=> new { a.ApplicationId, a.UserId});
運行代碼導致錯誤
無效的物件名稱 => ApplicationUser。
注意 - 雖然OnModelCreating只有名稱錯誤的物體存在。DB 有名為 UserApplication 的表

uj5u.com熱心網友回復:
您正在使用顯式和隱式連接物體的混合。恐怕 EF Core 假設 2 個獨立的多對多關系與 2 個獨立的表。請注意,按照慣例,隱式連接物體名稱的{Name1}{Name2}名稱按升序排列,在您的情況下為ApplicationUser.
您需要的是使用UsingEntityfluent API 的泛型多載并將顯式連接物體型別作為泛型型別引數傳遞。還要在那里配置連接物體,而不是單獨配置。例如
modelBuilder.Entity<User>()
.HasMany(x => x.Applications)
.WithMany(x => x.Users)
.UsingEntity<UserApplication>(
// ^^^
ua => ua.HasOne(e => e.Application).WithMany().HasForeignKey(e => e.ApplicationId),
ua => ua.HasOne(e => e.User).WithMany().HasForeignKey(e => e.UserId),
ua =>
{
ua.ToTable("UserApplication");
ua.HasKey(a => new { a.ApplicationId, a.UserId });
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/431748.html
