我有两个在数据库中相关的表: ChangeOrder和Auditor。 ChangeOrder有一个外键AuditorId字段,指向Auditor记录。
实体框架将关系构建为
public partial class ChangeOrder
{
public int Id { get; set; }
public Nullable<int> ActiveContractId { get; set; }
public virtual Auditor Auditor { get; set; }
每当我更改AuditorId时,我都没有在ChangeOrder更新中看到相关的Auditor实体,在实体加载它之前进行更改时,正确的AuditorId和Auditor.Name会返回,但是,当我标记ChangeOrder.State = State.Modified,Auditor实体变为null,即使在调用save之后AuditorId被更新,但Auditor记录为null。
我正在使用存储库模式:
ChangeOrder co;
using (UnitOfWork uow = new UnitOfWork())
{
using (ChangeOrderRepository changeOrderRepos = new ChangeOrderRepository(uow))
{
co = changeOrderRepos.All.Where(x => x.Id == id).Include(x => x.Auditor).FirstOrDefault();
// before this AuditorId = 1 and Auditor.Name is "Apple"
co.AuditorId = auditorNameId == -1 ? null : auditorNameId;
// now AuditorId = 2 and Auditor.Name is still "Apple", 2 = "Orange", but i have not saved so i get why it didn't change here
co.State = State.Modified;
changeOrderRepos.InsertOrUpdate(co);
}
uow.Save();
}
InsertOrUpdate方法是:
public void InsertOrUpdate(ChangeOrder entity)
{
if (entity.State == State.Added) // New entity
{
_context.Entry(entity).State = EntityState.Added;
}
else // Existing entity
{
_context.Entry(entity).State = EntityState.Modified;
}
}
首次调用该方法时,AuditorId为2,而Auditor.Name为&#34; Apple&#34;一旦State更改为Modified,AuditorId仍为2,但Auditor对象为null。
UnitOfWork类的Save方法:
public int Save()
{
return _context.SaveChanges();
}
如果我再次查找记录,该对象具有正确的名称(橙色),我只是不明白为什么在我执行保存之后,实体也没有更新Auditor记录。< / p>
答案 0 :(得分:2)
我在这里找到了一些帮助: http://msdn.microsoft.com/en-us/data/jj713564.aspx
在“加载相关对象”部分中,我必须在InsertOfUpdate调用后运行以下命令:
_context.Entry(entity).Reference(c => c.Auditor).Load();
这导致导航属性重新加载,因此Auditor.Name是&#34; Orange&#34;应该是的。