我有一个 HotelConference 对象,其中包含事件集合。
每个事件都有一个事件位置。
活动可以在同一地点举行,因为 BallRoomA 中可能举办两个活动。
当我添加一个具有已分配给先前事件的 EventLocation 的事件时,第一个 Event.EventLocation 为 null。
这是我正在使用的库
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="9.0.0-preview.6.24328.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Cosmos" Version="9.0.0-preview.6.24327.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0-preview.6.24327.4">
这是课程
public class Conference : CosmosBase
{
public Hotel Hotel { get; set; }
public ICollection<Event> Events { get; set; } = new List<Event>();
public string ConferenceName { get; set; }
}
public class Event : CosmosBase
{
public Conference Conference { get; set; }
public EventLocation EventLocation { get; set; }
public string EventName { get; set; }
}
public class EventLocation : CosmosBase
{
public Hotel Hotel { get; set; }
public string EventLocationName { get; set; }
}
这是种子代码
List<Event> CreateEvents(Hotel h, Conference c, List<EventLocation> locs)
{
var e0 = new Event();
e0.PK = h.PK;
e0.ID = e0.GetNewID();
e0.Conference = c;
e0.EventName = "Conference Check In";
e0.EventLocation = locs[0];
var e1 = new Event();
e1.PK = h.PK;
e1.ID = e1.GetNewID();
e1.Conference = c;
e1.EventName = "Keynote Session";
e1.EventLocation = locs[0];
var events = new List<Event>();
events.Add(e0);
events.Add(e1);
return events;
}
事件 e0.EventLocation 为空。 eventlocation 显然有相同的 id,但这应该不是问题,但我怀疑是这样。
这是 Cosmos db 中生成的 json
{
"ID": "2516807109275195800",
"PK": "H-0d5fdf24-845b-4d0b-b92b-1e48979f69aa",
"ConferenceDescription": "All hotels conference",
"ConferenceEndDate": "2024-10-10T15:00:00-05:00",
"ConferenceName": "The Big Conference",
"ConferenceStartDate": "2024-10-07T09:30:00-05:00",
"Discriminator": "Conference",
"HotelID": "2516807109275205674",
"HotelPK": "H-0d5fdf24-845b-4d0b-b92b-1e48979f69aa",
"id": "Conference|2516807109275195800",
"Events": [
{
"ID": "2516807109275185830",
"EventDescription": "Check in to conference",
"EventEndDate": "2024-10-07T15:30:00-05:00",
"EventName": "Conference Check In",
"EventStartDate": "2024-10-07T06:00:00-05:00",
"PK": "H-0d5fdf24-845b-4d0b-b92b-1e48979f69aa",
"EventLocation": null
},
{
"ID": "2516807109275183758",
"EventDescription": "Where the keynote speakers talk",
"EventEndDate": "2024-10-07T10:30:00-05:00",
"EventName": "Keynote Session",
"EventStartDate": "2024-10-07T09:00:00-05:00",
"PK": "H-0d5fdf24-845b-4d0b-b92b-1e48979f69aa",
"EventLocation": {
"EventLocationDescription": "The biggest ballroom we have",
"EventLocationName": "Grand Ballroom",
"HotelID": "2516807109275205674",
"HotelPK": "H-0d5fdf24-845b-4d0b-b92b-1e48979f69aa",
"ID": "2516807109275190703",
"PK": "H-0d5fdf24-845b-4d0b-b92b-1e48979f69aa"
}
},
我认为您的模式有些混乱,它可能将事件和事件位置之间的关系视为一对一而不是多对一。我没有看到您的事件表中引用了 EventLocationId,这是多对一允许事件共享位置所需要的。相反,如果架构将 EventId 放在您的 EventLocation 上,那么该位置将最终出现在您与之关联的最后一个事件上。
另外,PK 列与 ID 列的意义是什么?这看起来相当令人困惑,因为事件和事件位置共享相同的“PK”值。 “PK”通常被推断为“主键”,它与“ID”列同义,通常标记为 PK。