我有两个连接N到N的表:
[Table("Backoffice_Roles")]
public class Role
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid RoleId { get; set; }
public ICollection<User> Users { get; set; }
}
[Table("Backoffice_Users")]
public class User
{
// Primary key
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserId { get; set; }
public ICollection<Role> Roles { get; set; }
}
一切正常,它会创建3个表:Backoffice_Roles
,Backoffice_Users
和RoleUsers
。
有没有办法将RoleUsers
重命名为Backoffice_RoleUsers
?
我尝试在迁移文件中手动重命名表,但它会出现此错误:
System.Data.Entity.Infrastructure.DbUpdateException:发生错误 同时保存不公开外键属性的实体 他们的关系。 EntityEntries属性将返回null 因为单个实体不能被识别为 例外。保存时可以更轻松地处理异常 在您的实体类型中公开外键属性。见 InnerException以获取详细信息。 ---&GT; System.Data.Entity.Core.UpdateException:发生错误 更新条目。有关详细信息,请参阅内部异常---&GT; System.Data.SqlClient.SqlException:无效的对象名称 'dbo.RoleUsers'。
此迁移不会手动更改上一个表的名称:
public override void Up()
{
CreateTable(
"dbo.Backoffice_Users",
c => new
{
UserId = c.Guid(nullable: false, identity: true),
})
.PrimaryKey(t => t.UserId);
CreateTable(
"dbo.Backoffice_Roles",
c => new
{
RoleId = c.Guid(nullable: false, identity: true),
})
.PrimaryKey(t => t.RoleId);
CreateTable(
"dbo.RoleUsers",
c => new
{
Role_RoleId = c.Guid(nullable: false),
User_UserId = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.Role_RoleId, t.User_UserId })
.ForeignKey("dbo.Backoffice_Roles", t => t.Role_RoleId)
.ForeignKey("dbo.Backoffice_Users", t => t.User_UserId)
.Index(t => t.Role_RoleId)
.Index(t => t.User_UserId);
}
答案 0 :(得分:2)
使用以下映射为联结表提供名称:
modelBuilder.Entity<Role>()
.HasMany(r => r.Users)
.WithMany(u => u.Roles)
.Map(m => m.ToTable("Backoffice_RoleUsers"));
您可以通过覆盖OnModelCreating
课程的DbContext
方法来提供映射。