如何在EF Core同时创建一对多和一对一

时间:2018-03-15 03:42:53

标签: c# entity-framework entity-framework-core

用简单的英语:

房间(主体实体)有一个RoomPrice(从属实体)。这似乎是一对一的关系。但是,我也想保留房价变化的历史。

当我创建一对一的关系时,ef核心迁移会创建一个明显独特的索引,以确保为同一个房间创建的RoomPrice不多。

不知何故,我实际上希望能够为单个房间创建多个房间价格(并保留历史记录),但只有一个RoomPrices可以被引用到房间。

这样的事情:

public class Room
{
    public int Id { get; set; }
    public string Number { get; set; }
    public RoomPrice RoomPrice { get; set; } // current room price
    public int? RoomPriceId { get; set; } // current room price id
    public ICollection<RoomPrices> RoomPrices { get; set; }
}

public class RoomPrice
{
    public int Id { get; set; }
    public decimal Amount { get; set; }
    public DateTime CreationTime { get; set; }
    public int RoomId { get; set; }
}

但不知何故,上述迁移可以创建表格。但是,添加新房间会引发以下异常:

  

INSERT语句与FOREIGN KEY约束冲突   “FK_Rooms_RoomPrices_RoomPriceId”。冲突发生在数据库中   “test”,表格“dbo.RoomPrices”,列“Id”。

ef核心中是否有此定义?如何在流畅的api或数据注释中设置这种关系?

或者我完全弄错了,我应该实现一对多的关系,并将CreationTime的最新条目作为房间的有效/当前房价?

0 个答案:

没有答案