使用子句后,导航属性变为空

时间:2011-11-10 13:10:49

标签: c# linq linq-to-entities

我的ASP.Net项目中有一个数据库实体模型

Model.edmx construct

有两个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,而我没有对这些值进行任何更改。

如何保留导航值?

由于

2 个答案:

答案 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();