用简单的英语:
房间(主体实体)有一个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的最新条目作为房间的有效/当前房价?