添加列以连接表EF6

时间:2017-04-06 12:23:38

标签: c# .net entity-framework

我首先使用EF6代码进行数据库迁移,而且我是初学者。我正在构建一个web api。在我的模型计划中,我有一个User(Identity Framework)和一个具有多对多关系的Location类。 EF6自动创建了一个表LocationUser,但我想用一些额外的列来扩展这个表。但是最好的方法是什么呢。

当然,我已经寻找了一些解决方案,但我不确定最好的方法是什么。

我可以编辑上一次迁移Up方法并添加我想要的列,但我不确定这是否是最好的方法。在我看来,手动创建一个新的模型类也是一种可能性。

有谁能告诉我最好的方法是什么,并说明原因?

User.cs

public class User : IdentityUser
{
    public virtual ICollection<Location> Locations { get; set; }
    // Other code for Identity Framework
}

Location.cs

public class Location
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public double Lat { get; set; }
    public double Lng { get; set; }

    public virtual ICollection<User> Users{ get; set; }
}

2 个答案:

答案 0 :(得分:2)

在我看来,最好的方法是在其上下文中使用fluet api,以获得更好理解的教程:

样品:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<User>()
                .HasMany<Location>(u => u.Locations)
                .WithMany(l => l.Students)
                .Map(ul =>
                        {
                            cs.MapLeftKey("UserId");
                            cs.MapRightKey("LocationId");
                            cs.ToTable("UserLocation");
                        });

}

教程: http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

对于模型的更新,我总是创建新的迁移,以免损害实际的操作历史。

答案 1 :(得分:1)

您可以创建自己的UserLocation课程,如下所示。

public class UserLocation
{
    public int Id { get; set; }
    public Location Location { get; set; }
    public User User { get; set; }
    //Extra fields you want can go here
}

然后,在UserLocation课程中,您将更改链接以使用UserLocation课程。

示例:

public class User : IdentityUser
{
    public virtual ICollection<UserLocation> Locations { get; set; }
    // Other code for Identity Framework
}

还可以在您的类中添加EntityTypeConfiguration以强制执行多个,下面将是User

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        HasKey(x => x.Id);
        HasMany(x => x.Locations);
    }
}