gpt4 book ai didi

c# - 如何在 Entity Framework Core 中为多对多关系创建第三个表?

转载 作者:行者123 更新时间:2023-12-04 14:24:04 24 4
gpt4 key购买 nike

我有两个类:一个是用户

 public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public List<Subscription> Subscriptions { get; set; }
}

其他是订阅:

public class Subscription
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}

如您所见,用户有一个订阅列表。现在,当使用 Entity Framework 代码优先方法时,我得到一个不包含订阅的用户表,但用户 ID 的新列被添加到订阅表中。我期望有第三个表,其中包含两列,一列是用户 ID,另一列是订阅 ID。我怎样才能做到这一点?

最佳答案

来自 documentation :

尚不支持没有实体类来表示连接表的多对多关系。但是,您可以通过包含连接表的实体类并映射两个单独的一对多关系来表示多对多关系。

所以 this answer是正确的。

我只是稍微更正了代码:

class MyContext : DbContext
{
public DbSet<Use> Users { get; set; }
public DbSet<Subscription> Subscriptions { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserSubscription>()
.HasKey(t => new { t.UserId, t.SubscriptionId });

modelBuilder.Entity<UserSubscription>()
.HasOne(pt => pt.User)
.WithMany(p => p.UserSubscription)
.HasForeignKey(pt => pt.UserId);

modelBuilder.Entity<UserSubscription>()
.HasOne(pt => pt.Subscription)
.WithMany(t => t.UserSubscription)
.HasForeignKey(pt => pt.SubscriptionId);
}
}

public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public List<UserSubscription> UserSubscriptions{ get; set; }
}

public class Subscription
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public List<UserSubscription> UserSubscriptions{ get; set; }
}

public class UserSubscription
{
public int UserId { get; set; }
public User User { get; set; }

public int SubscriptionId { get; set; }
public Subscription Subscription { get; set; }
}

附言。您不需要在导航属性中使用虚拟,因为延迟加载 still not available in EF Core .

关于c# - 如何在 Entity Framework Core 中为多对多关系创建第三个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49592428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com