我首先使用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; }
}
答案 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");
});
}
对于模型的更新,我总是创建新的迁移,以免损害实际的操作历史。
答案 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
}
然后,在User
和Location
课程中,您将更改链接以使用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);
}
}