gpt4 book ai didi

entity-framework - EF 代码首先从数据库 0..1 到许多关系

转载 作者:行者123 更新时间:2023-12-04 15:33:11 26 4
gpt4 key购买 nike

我正在尝试从现有数据库生成 Entity Framework 代码优先模型(不更改数据库架构)。该数据库过去曾用于生成 edmx 模型,我正在尝试使用 Fluent Api 或数据注释来实现等效模型。

我无法重现的关系是 0..1 到许多使用连接表(不是可为空的外键)。

所以它看起来像这样:

TableA
{
ID (PrimaryKey)
TableB (0 or 1)
}

JoinTable
{
TableA_FK (PrimaryKey, ForeignKey),
TableB_FK (ForeignKey)
}

TableB
{
ID (PrimaryKey)
TableAs (Many)
}

这是可以在代码优先风格中实现的,还是我必须生成一个 edmx 模型才能在 EF 中使用该数据库而不更改其架构?

非常感谢,
菲尔

最佳答案

这是一个不使用 JoinTable 类的示例。连接表是通过fluent api 配置的。

class DataContext : DbContext
{
public DataContext(string connectionString)
: base(connectionString)
{ }

public DbSet<TableA> TableA { get; set; }
public DbSet<TableB> TableB { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity<TableA>().ToTable("TableA");
modelBuilder.Entity<TableB>().ToTable("TableB");

modelBuilder.Entity<TableB>()
.HasMany(x => x.TableAs)
.WithMany()
.Map(m =>
{
m.ToTable("JoinTable");
m.MapLeftKey("TableA_FK");
m.MapRightKey("TableB_FK");
});
}
}

class TableA
{
public int ID { get; set; }
public TableB TableB { get; set; }
}

class TableB
{
public int ID { get; set; }
public ICollection<TableA> TableAs { get; set; }
}

这将生成以下迁移脚本,它看起来像您拥有的架构。
public override void Up()
{
CreateTable(
"dbo.TableA",
c => new
{
ID = c.Int(nullable: false, identity: true),
TableB_ID = c.Int(),
})
.PrimaryKey(t => t.ID)
.ForeignKey("dbo.TableB", t => t.TableB_ID)
.Index(t => t.TableB_ID);

CreateTable(
"dbo.TableB",
c => new
{
ID = c.Int(nullable: false, identity: true),
})
.PrimaryKey(t => t.ID);

CreateTable(
"dbo.JoinTable",
c => new
{
TableA_FK = c.Int(nullable: false),
TableB_FK = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.TableA_FK, t.TableB_FK })
.ForeignKey("dbo.TableB", t => t.TableA_FK, cascadeDelete: true)
.ForeignKey("dbo.TableA", t => t.TableB_FK, cascadeDelete: true)
.Index(t => t.TableA_FK)
.Index(t => t.TableB_FK);

}

关于entity-framework - EF 代码首先从数据库 0..1 到许多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31313079/

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