gpt4 book ai didi

entity-framework - Entity Framework 多对多数据库迁移

转载 作者:行者123 更新时间:2023-12-04 17:11:13 27 4
gpt4 key购买 nike

我正在使用 Entity Framework 4.4 和 .NET Framework 4.0 构建 ASP MVC 网站

我在我的模型中添加了多对多的关系,如下所示:

  public class User {
public int UserID { get; set; }
public string Username { get; set; }
public virtual ICollection<Tenant> Tenants { get; set; }
}


public class Tenant {
public string TenantID { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; }
}

当我跑 Add-Migration命令我得到这个迁移类(我删除了 Down 方法)
  public partial class TenantUsersManyToManyMigration : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.UserTenants",
c => new
{
User_UserID = c.Int(nullable: false),
Tenant_TenantID = c.String(nullable: false, maxLength: 128),
})
.PrimaryKey(t => new { t.User_UserID, t.Tenant_TenantID })
.ForeignKey("dbo.Users", t => t.User_UserID, cascadeDelete: true)
.ForeignKey("dbo.Tenants", t => t.Tenant_TenantID, cascadeDelete: true)
.Index(t => t.User_UserID)
.Index(t => t.Tenant_TenantID);
}
}
  • 为什么 TenantID 和 UserID 的字段名称分别是 User_UserID 和 Tenant_TenantID 而不是 UserID 和 TenantID。
  • 如何更改默认的迁移脚手架(或我的模型)以将 cascadeDelete 设为 false? (目前我只是手动更改它)。
  • 最佳答案

    您可以使用流畅的表示法以您想要的方式创建映射表。在您的 DbContext 类中,使用以下内容覆盖 OnModelCreating:

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity<User>()
    .HasMany(u => u.Tenants)
    .WithMany(t => t.Users)
    .Map(m =>
    {
    m.ToTable("UserTenants");
    m.MapLeftKey("UserId");
    m.MapRightKey("TenantId");
    });
    }

    此外,使用 fluent,如果您想在单个表上禁用级联删除,您可以在映射属性时使用 .WillCascadeDelete(false)。这是一个很棒的 post on MSDN关于如何使用流利的符号。

    关于entity-framework - Entity Framework 多对多数据库迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12384683/

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