我使用Entity Framework 6(Code First)。我有一节课:
public class DialogSession {...}
另一个包含DialogSession
个对象列表的类:
public class DialogUser
{
public int Id { get; set; }
public List<DialogSession> DialogSessions { get; set; }
}
我将DialogSession
对象添加到列表中,然后执行context.SaveChanges()
,如下所示:
dialogUser.DialogSessions.Add(dialogSession);
context.SaveChanges();
但是dialogSession
记录的外键仍然是空的:
我尝试在网络上使用多种方法,如下所示,但取得了成功:
context.DialogUsers.Attach(dialogUser);
context.Entry(dialogUser).State = EntityState.Modified;
context.SaveChangesExtention();
有没有人知道如何使用Entity Framework(6)在数据库中保存内部对象(如列表)?
答案 0 :(得分:1)
从你的问题不清楚你有哪种关系类型,所以我猜你有一对多,这样的事情应该有效:
public class DialogSession
{
public int DialogSessionId { get; set; }
public virtual DialogUser DialogUser { get; set; }
}
public class DialogUser
{
public int DialogUserId { get; set; }
public virtual ICollection<DialogSession> DialogSessions { get; set; }
}
请看一下示例如何在此article中正确配置此类关系。
答案 1 :(得分:0)
如果我没错,你应该添加
dialogUser.DialogSessions.Add(dialogSession);
context.Entry(dialogUser).State = EntityState.Modified;
context.SaveChanges();
这会将实体标记为已修改,然后更改应反映在数据库中。
通过将奇异属性标记为已修改
,可以更有效地完成此操作dialogUser.DialogSessions.Add(dialogSession);
context.Entry(dialogUser).Property(u => u.dialogSession).IsModified = true;
context.SaveChanges();
试一试:)
答案 2 :(得分:0)
请参阅:https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx
您应该为子实体使用虚拟列表,并确保DialogSessions类还使用DialogUserId属性(按约定命名)返回其父级