【发布时间】:2017-09-26 11:19:47
【问题描述】:
我有一个旧数据库,我无法用每个实体中具有外键属性的两个实体进行更改:
EntityOne
ForeignKey1 (pointing to EntityTwo.ForeignKey2)
EntityTwo
ForeignKey2 (pointing to EntityOne.ForeignKey1)
这些外键指向彼此。如何将这种关系与 EF6 映射?如果不可能,有什么解决方法吗?
我使用一个测试数据库进行了测试,该数据库实际上具有从 EntityOne 到 EntityTwo 的外键关系以及从 EntityTwo 到 EntityOne 的另一个外键关系,并自动生成模型,代码首先来自数据库,但没有在两个表之间创建任何关系:
public partial class EntityFrameworkTesting : DbContext
{
public EntityFrameworkTesting()
: base("name=EntityFrameworkTesting")
{
}
public virtual DbSet<EntityOne> EntityOne { get; set; }
public virtual DbSet<EntityTwo> EntityTwo { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
通过一些额外的尝试,我成功地在这些实体之间建立了关系。但是,我不得不从我的 POCO 类中删除外键属性以允许使用 MapKey 函数。我仍然想访问外键,但是当再次添加外键属性时,我收到一条错误消息:“ForeignKey2:名称:类型中的每个属性名称必须是唯一的。属性名称‘ForeignKey2’已经定义。” .
基本上我正在寻找我现在拥有的关系功能,但在我的 POCO 类上添加了外键属性。
modelBuilder.Entity<EntityTwo>()
.HasRequired(entity => entity.EntityOne)
.WithRequiredDependent(entity => entity.EntityTwo)
.Map(m => m.MapKey("ForeignKey2"));
【问题讨论】:
标签: entity-framework