我的ASP.Net项目中有一个数据库实体模型
有两个foreignkeyconstructs,都是显示关系中id之间的结构。
现在我尝试使用以下方法添加100个样本条目
IntraNetEntities entities = new IntraNetEntities();
if (entities.EmployeeList.Count() == 0)
{
using (entities)
{
for (int i = 0; i < 100; i++)
{
EmployeeList newEmployeeList = new EmployeeList()
{
department = "Standardabteilung",
mobile = i,
landline = 1 + i,
mail = "Standardemail",
position = "Standardfunktion",
shortcode = "abc",
lastname = "StandardNachname",
roomnumber = Convert.ToDouble(i),
firstname = "Standardvorname"
};
PrivateContact newPrivateContact = new PrivateContact()
{
city = "Standardstadt",
country = "deutscheland",
landline = i,
mail = "standardemail",
mobile = i * 2,
street = "standardstreet",
zip = i * 10,
EmployeeList = newEmployeeList
};
WorkContact newWorkContact = new WorkContact()
{
city = "Standardstadt",
country = "deutscheland",
landline = i * 9,
mobile = i * 12 / 8,
mail = "standardmail",
street = "standardstraße",
zip = i * 9,
EmployeeList = newEmployeeList
};
newEmployeeList.PrivateContact = newPrivateContact;
newEmployeeList.WorkContact = newWorkContact;
entities.AddToEmployeeList(newEmployeeList);
entities.AddToPrivateContact(newPrivateContact);
entities.AddToWorkContact(newWorkContact);
}
entities.saveChanges();
return true;
}
}
else
{
return false;
}
我的问题是,当此方法结束时,我的导航属性会消失! 它们在调试时看起来都很好,但仍处于使用情况,但之后它们都是null,而我没有对这些值进行任何更改。
如何保留导航值?
由于
答案 0 :(得分:1)
在其末尾使用“Dispose”调用。这就是你的导航属性下降的原因。来自MSDN网站:
using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
using语句允许程序员指定何时使用资源的对象应该释放它们。
http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.80%29.aspx
答案 1 :(得分:0)
退出using
块时,您的上下文将被处理掉。
导航属性需要现有的上下文。所以你必须确保你的上下文对象足够长。
您可以考虑使用Autofac或其他支持asp.net的di框架。
使用HttpRequestScoped()
扩展方法,您的上下文将根据Web请求的实时周期进行构建和处理:
builder.RegisterType<IntraNetEntities>().As<IntraNetEntities>().HttpRequestScoped();