我有以下实体:
public class Seminar
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public virtual List<Meeting> Meetings { get; set; }
}
和
public class Meeting
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int SeminarId { get; set; }
public string ThirdPartyId { get; set; }
public DateTime StartDate { get; set; }
public virtual Webinar Webinar { get; set; }
}
Meeting
与Seminar
属性(外键)与SeminarId
相关。
调用第三方API后填充ThirdPartyId
属性(名称已更改以保护我的兴趣) - 它是&#34;链接&#34;到那个系统。
为了进行此调用(我们在该系统上创建相同的对象),我们需要与会议相关的研讨会中的Title
和Description
信息。
所以,让我说我创建一个新的会议:
using (var db = new MyDbContext())
{
Meeting meeting = new Meeting
{
SeminarId = 5 // this would normally be loaded from elsewhere, obviously
};
// Load the meeting.Webinar property somehow here
m_thirdPartyApiClient.CreateMeeting(meeting); // Uses meeting.Webinar.Title and meeting.Webinar.Description
db.SaveChanges();
}
我想要做的是在调用第三方API或meeting
之前在SaveChanges
加载外键属性。这可能吗?
答案 0 :(得分:1)
只需通过其ID为研讨会调用数据库,并将其分配给会议,如Meeting.Seminar = dbSeminar
。要回答你的评论,virtual
只是说这个方法/属性可能被一个继承类覆盖,当被覆盖使用继承类的prop / method 时,即使ref是类型基类只要实际类型是继承类。
答案 1 :(得分:1)
将实体对象添加到相应的DbSet
后,您可以使用Load
方法加载任何引用属性,如下所示:
Meeting meeting = new Meeting
{
SeminarId = 5 // this would normally be loaded from elsewhere, obviously
};
db.Meetings.Add(meeting);
// meeting.Webinar is still null
db.Entry(meeting).Reference(m => m.Webinar).Load();
// meeting.Webinar is populated