实体框架代码优先:自定义映射

本文关键字:自定义 映射 框架 代码 实体 | 更新日期: 2023-09-27 18:05:07

public class User
{
   public int Id {get;set;}
   public string Name {get;set}
   public ICollection<User> Followers {get;set;}
   public ICollection<User> Following {get;set;}
}

我的模型看起来像上面,实体框架自动创建一个表和UserUser,行User_IDUser_ID1在DB映射这个模型。我想自己映射那个表和行

我怎么能那样做,谢谢!!

实体框架代码优先:自定义映射

选自Scott Gu关于多值关联的博客:

多对多关联Category和Item之间的关联是多对多的关联,可以在上面的类图中看到。多对多关联映射隐藏了中间关联表应用程序,这样您就不会在域模型。也就是说,在一个真实的系统中,你可能没有多对多联想自我的经验是几乎存在的总是其他的信息必须附加到每个链接之间关联实例(例如添加项的日期和时间)到一个类别),表示该信息的最佳方式是通过中间关联类(在EF中,您可以映射类作为实体并映射两个一对多关联).

在多对多关系中,连接表(或链接表)作为一些开发人员称之为)有两列:Category的外键和Item表。主键是两个列的组合。在EF 代码优先,可以使用自定义多对多关联映射

    class ItemConfiguration : EntityTypeConfiguration<Item> {
    internal ItemConfiguration()
    {
        this.HasMany(i => i.Categories)
            .WithMany(c => c.Items)
            .Map(mc =>
            {
                mc.MapLeftKey("ItemId");
                mc.MapRightKey("CategoryId");
                mc.ToTable("ItemCategory");
            });
    } }

在你的DbContext中注册这个配置(你使用的是DbContext api,对吗?)

  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    base.OnModelCreating(modelBuilder);
    modelBuilder.Configurations.Add(new ItemConfiguration());
  }

祝你好运,希望这有助于!

要将实体映射到自身,您可以这样做

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().HasMany(u => u.Followers)
        .WithMany().ForeignKey(u => u.FollowerId);
    base.OnModelCreating(modelBuilder);
}

如果没有看到你的数据库模型,以及你是如何将追随者与用户联系起来的,这很难判断。