【发布时间】:2018-12-03 00:36:40
【问题描述】:
我正在尝试将两个实体保存到相互关联的数据库中,但其中一个实体从不保存另一个实体的 ID。
我有一个位置类:
public string Name { get; set; }
public string Description { get; set; }
public string Latitude { get; set; }
public string Longitude { get; set; }
public Company Company { get; set; }
[ForeignKey("OpeningTimeId")]
public OpeningTime OpeningTimes { get; set; }
我有一个 OpeningTimes 课程:
public string Monday { get; set; }
public string Tuesday { get; set; }
public string Wednesday { get; set; }
public string Thursday { get; set; }
public string Friday { get; set; }
public string Saturday { get; set; }
public string Sunday { get; set; }
[ForeignKey("LocationId")]
public Location Location { get; set; }
然后我尝试将这些保存到数据库中:
Location location = new Location()
{
Name = LocationDto.Name,
Description = LocationDto.Description,
Latitude = LocationDto.Latitude,
Longitude = LocationDto.Longitude,
Company = LocationDto.Company,
OpeningTimes = new OpeningTime() {
Monday = LocationDto.OpeningTimes.Monday,
Tuesday = LocationDto.OpeningTimes.Tuesday,
Wednesday = LocationDto.OpeningTimes.Wednesday,
Thursday = LocationDto.OpeningTimes.Thursday,
Friday = LocationDto.OpeningTimes.Friday,
Saturday = LocationDto.OpeningTimes.Saturday,
Sunday = LocationDto.OpeningTimes.Sunday,
}
};
_context.Locations.Add(location);
_context.SaveChanges();
当它被保存到数据库时,Locations 表中的 OpeningTimeId 列被填充,但 OpeningTimes 表中的 LocationId 列未被填充。
现在在这个特定示例中,我不一定需要填充 LocationId 列,但我确实需要为其他实体执行此操作,我不确定为什么这不起作用.
【问题讨论】:
-
在两个表中都有一个 FK 相互引用,这有点不寻常。如果我没看错,你想要的是 Locations 有 OpeningTimes。这意味着每个OpeningTime 都会有一个LocationId。但是 Locations 不会有 OpeningTimeId。相反,要查找属于某个位置的 OpeningTimes,您只需执行
location.OpeningTimes。在引擎盖下,数据库将“SELECTFROM OpeningTimes WHERE LocationId = ” -
对,好吧,有道理。所以我现在的工作有点倒退。所以我会从 OpeningTimes 类中删除
public Location Location { get; set; }属性。?还是反过来? -
对,您可以将 Location 公共成员从 OpeningTimes 课程中移除。这是一篇类似的文章:weblogs.asp.net/manavi/…
-
酷,谢谢。这是有道理的,而且有效。尽管它与您的原始描述相反。这使我的 Locations 表带有一个 OpeningTimesId 列。但这对我来说很好。
标签: c# .net-core entity-framework-core ef-core-2.0