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解决所有这些方便的内置关系集合?
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)
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |