EF相同实体之间的一对一和一对多

本文关键字:一对一 一对多 之间 实体 EF | 更新日期: 2023-09-27 18:16:59

我有以下问题:我需要创建实体,这些实体将同时与实体框架中的一对多和一对一关系连接。

我想创建的模型如下:我有MapObject实体和FloorMap实体。在FloorMap上有很多MapObject,但是FloorMap是另一个MapObject的一部分。我该如何实现它?

我想这样做:

public class FloorMap
{
    public int FloorMapID { get; set; }
    public int FloorNumber { get; set; }
    public string FloorImage { get; set; }
    public string FloorMapDescription { get; set; }
    public virtual List<MapObject> MapObjects { get; set; }
    public virtual MapObject MapObject { get; set; }
}
public partial class MapObject
{
    [Key,ForeignKey ("FloorMap")]
    public int FloorMapRefID { get; set; }
    public virtual FloorMap FloorMap { get; set; }
}

不幸的是,这并不像我想要的那样工作。在EF中有没有办法实现这样的关系?

EF相同实体之间的一对一和一对多

我真的不确定我明白你在问什么,但听起来你想要一个有一个父母和许多孩子的平面图。我不太确定为什么你想要MapObject与这个混合,但肯定。

public class FloorMap
{
    public int FloorMapID { get; set; }
    public int FloorNumber { get; set; }
    public string FloorImage { get; set; }
    public string FloorMapDescription { get; set; }
    public virtual List<MapObject> MapObjects { get; set; }
    public virtual MapObject MapObject { get; set; }
}
public partial class MapObject
{
    [Key,ForeignKey ("FloorMap")]
    public int FloorMapRefID { get; set; }
    public virtual FloorMap FloorMap { get; set; }
    public int OtherFloorMapRefID {get;set;}
    public virtual FloorMap OtherFloorMap { get; set; }
}

modelBuilder.Entity<FloorMap>().HasMany(e => e.MapObjects).WithRequired(e=>e.OtherFloorMap).HasForeignKey(e=>e.OtherFloorMapRefID);
modelBuilder.Entity<FloorMap>().HasOptional(e => e.MapObject).WithRequired(e=>e.FloorMap);

这看起来像你要做的吗?