实体框架4.1在SaveChanges之后不加载关系?

McG*_*V10 2 entity-framework entity-framework-4.1

我是EF的新手.在调用SaveChanges后,似乎无法获得相关的表数据.

假设我有一个包含以下表格的数据库:User,Feature和FeatureUser.FeatureUser将用户和功能记录绑定在一起.我有一个接受Feature对象的方法,它使用基于FeatureUser表的User.name值填充列表.这很好用:

using (var db = new projectModel())
{
  feature f = db.features.First();
  populateList(f);
}

private void populateList(feature f)
{
  foreach(featureuser fu in f.featureusers)
    addToList(fu.user.name);
}
Run Code Online (Sandbox Code Playgroud)

上面代码中的重点是,我通过FeatureUser表的内置链接返回到User.name值,返回到User表.什么是行不通的是创建新的FeatureUser记录,然后保存它们,然后尝试遵循相同的过程:

using (var db = new projectModel())
{
  feature f = db.features.First();
  foreach(int newuserid in somearray)
  {
    featureuser nfu = new featureuser();
    nfu.featureid = f.id;
    nfu.userid = newuserid;
    f.featureusers.add(nfu);
  }
  db.SaveChanges();
  populateList(f); // null reference error on fu.user.name
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在我建立并保存创建关系所需的外键后告诉EF解决所有这些方便的内置关系集合?

Era*_*nga 9

EF返回的实体实例实际上是代理.它们包含延迟加载导航属性的逻辑.但是当你新建它的实例时featureuser没有那个逻辑,因为它没有那个延迟加载逻辑.

因此,让EF创建一个代理实例.

  foreach(int newuserid in somearray)
  {
    //create proxy instance
    var nfu = db.featureusers.Create();

    nfu.featureid = f.id;
    nfu.userid = newuserid;
    f.featureusers.add(nfu);
  }
Run Code Online (Sandbox Code Playgroud)