如何解决EF将一个实体核心到多个表
我在项目中使用EF Core。 Parent
实体具有相同Child
类的三个子集合。
public class Parent
{
public virtual List<Child> FirstCollection { get; set; }
public virtual List<Child> SecondCollection { get; set; }
public virtual List<Child> ThirdCollection { get; set; }
}
public class Child
{
public int Order { get; set; }
public string Name { get; set; }
}
我想将这些集合存储在db的多个表中,例如“ First”,“ Second”和“ Third”。
是否可以配置Ef核心?
解决方法
使用EF Core 3.0。
我们开始通过向Parent
类添加主键来定义关系:
public class Parent
{
public int Id { get; set; }
public List<Child> FirstCollection { get; set; }
public List<Child> SecondCollection { get; set; }
public List<Child> ThirdCollection { get; set; }
}
要配置关系和表,我们使用Fluent API。我们覆盖OnModelCreating
方法:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Parent>(entity =>
{
entity.OwnsMany(x => x.FirstCollection,a =>
{
a.ToTable("First");
a.HasKey("Id");
});
entity.OwnsMany(x => x.SecondCollection,a =>
{
a.ToTable("Second");
a.HasKey("Id");
});
entity.OwnsMany(x => x.ThirdCollection,a =>
{
a.ToTable("Third");
a.HasKey("Id");
});
});
}
我们已使用Owned Types将类映射到数据库。
要将数据保存在三个不同的表中,我们将ToTable方法添加到配置中。
结果是一个像这样的表(SQLite):
CREATE TABLE "First" (
"Id" INTEGER NOT NULL CONSTRAINT "PK_First" PRIMARY KEY AUTOINCREMENT,"Order" INTEGER NOT NULL,"Name" TEXT NULL,"ParentId" INTEGER NOT NULL,CONSTRAINT "FK_First_Parents_ParentId" FOREIGN KEY ("ParentId") REFERENCES "Parents" ("Id") ON DELETE CASCADE
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。