Entity framework EF6代码优先-多个一对多和同一实体
我有一个实体模型,其中包含对另一个实体的多个定义。我可以用一个定义,但不能两者都用Entity framework EF6代码优先-多个一对多和同一实体,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我有一个实体模型,其中包含对另一个实体的多个定义。我可以用一个定义,但不能两者都用 public class Inspection : Entity<int> { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int InspectionId { get; set; } [ForeignKey("Report")] public int
public class Inspection : Entity<int>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int InspectionId { get; set; }
[ForeignKey("Report")]
public int ReportId { get; set; }
public virtual Report Report { get; set; }
....
public virtual ICollection<ResidentialDescriptionItem> ResidentialDescriptionItems { get; set; }
public virtual ICollection<ResidentialDescriptionItem> ResidentialOtherDescriptionItems { get; set; }
}
public class ResidentialDescriptionItem : Entity<int>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ResidentialDescriptionItemId { get; set; }
public int InspectionId { get; set; }
[ForeignKey("InspectionId")]
public virtual Inspection Inspection { get; set; }
//public int Inspection1Id { get; set; }
//[ForeignKey("Inspection1Id")]
//public virtual Inspection Inspection1 { get; set; }
}
公共类检查:实体
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int-InspectionId{get;set;}
[外汇(“报告”)]
public int ReportId{get;set;}
公共虚拟报表{get;set;}
....
公共虚拟ICollection ResidentialDescriptionItems{get;set;}
公共虚拟ICollection ResidentialTherDescriptionItems{get;set;}
}
公共类ResidentialDescriptionItem:实体
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int ResidentialDescriptionItemId{get;set;}
public int-InspectionId{get;set;}
[外键(“检查ID”)]
公共虚拟检查{get;set;}
//public int-Inspection1Id{get;set;}
//[外键(“检查1ID”)]
//公共虚拟检查检查1{get;set;}
}
我对第二个索引进行了多次尝试,并收到了同样多的错误。上述配置导致
无法确定服务器的主端
'MySolution.EntityFramework.ResidentialDescriptionItem_'
关系多个添加的实体可能具有相同的主键
我想保持一个完整的配置与导航两侧。如何首先使用代码和注释来实现这一点?我认为不可能实现与注释的如此复杂的关系,但下面是一个演示,您需要如何覆盖您的
DbContext.OnModelCreating
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Linq;
namespace ConsoleApp3
{
public class Parent
{
[Key]
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
public virtual ICollection<Child> OtherChildren { get; set; }
}
public class Child
{
[Key]
public int Id { get; set; }
[ForeignKey("Parent")]
public int? ParentId { get; set; }
[ForeignKey("ParentId")]
public virtual Parent Parent { get; set; }
[ForeignKey("OtherParent")]
public int? OtherParentId { get; set; }
[ForeignKey("OtherParentId")]
public virtual Parent OtherParent { get; set; }
}
public class MyDbContext : DbContext
{
public MyDbContext(string nameOrConnectionString) : base(nameOrConnectionString)
{
}
public DbSet<Parent> Parents { get; set; }
public DbSet<Child> Children { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Parent>()
.HasMany(x => x.Children)
.WithOptional(x => x.Parent);
modelBuilder.Entity<Parent>()
.HasMany(x => x.OtherChildren)
.WithOptional(x => x.OtherParent);
}
}
class Program
{
static void Main(string[] args)
{
Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
var ctx = new MyDbContext("Data Source=DESKTOP-5PVJ0I5;Database=test1;Integrated Security=true");
var parent = ctx.Parents.Add(new Parent());
ctx.Children.Add(new Child()
{
OtherParent = parent
});
ctx.Children.Add(new Child()
{
Parent = parent
});
ctx.SaveChanges();
parent = ctx.Parents
.Include(x => x.Children)
.Include(x => x.OtherChildren)
.FirstOrDefault();
}
}
}
使用System.Collections.Generic;
使用System.ComponentModel.DataAnnotations;
使用System.ComponentModel.DataAnnotations.Schema;
使用System.Data.Entity;
使用System.Linq;
名称空间控制台AP3
{
公共类父类
{
[关键]
公共int Id{get;set;}
公共虚拟ICollection子项{get;set;}
公共虚拟ICollection其他子对象{get;set;}
}
公营儿童
{
[关键]
公共int Id{get;set;}
[外键(“母公司”)]
public int?ParentId{get;set;}
[ForeignKey(“ParentId”)]
公共虚拟父级{get;set;}
[外键(“其他母公司”)]
public int?OtherParentId{get;set;}
[ForeignKey(“OtherParentId”)]
公共虚拟父对象OtherParent{get;set;}
}
公共类MyDbContext:DbContext
{
公共MyDbContext(字符串名称或连接字符串):基(名称或连接字符串)
{
}
公共数据库集父项{get;set;}
公共DbSet子项{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(x=>x.Children)
.WithOptional(x=>x.Parent);
modelBuilder.Entity()
.HasMany(x=>x.OtherChildren)
.WithOptional(x=>x.OtherParent);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
SetInitializer(新的DropCreateDatabaseAlways());
var ctx=new MyDbContext(“数据源=DESKTOP-5PVJ0I5;数据库=test1;集成安全性=true”);
var parent=ctx.Parents.Add(newparent());
ctx.Children.Add(新的子对象()
{
OtherParent=父
});
ctx.Children.Add(新的子对象()
{
父=父
});
ctx.SaveChanges();
parent=ctx.Parents
.包括(x=>x.儿童)
.包括(x=>x.OtherChildren)
.FirstOrDefault();
}
}
}