在MVC应用程序的实体框架中共享objectcontext

时间:2012-11-13 01:46:39

标签: asp.net-mvc entity-framework objectcontext

我正在开发一个ASP.NET MVC应用程序(使用Entity Framework1.0的Microsoft .NET Framework版本3.5 SP1)。我的MySQL数据库中有大约30个表。到目前为止,我已经创建了10个Model类。我在所有模型中都有一个dataentity实例。

样本模型类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyProj.Models
{
    public class SSDModel
private ddms_dataEntities2 db = new ddms_dataEntities2();

public ssd searchbyId(string id)
        {
            return db.ssd.FirstOrDefault(d => d.ssd_id_text == id);
        }

 public void add(ssd item)
        {
            db.AddTossd(item);
        }
}

当我尝试通过实例化SSDModel的对象从另一个模型类访问方法searchbyId()时,我得到了一个异常 - objectcontext未被共享。

我试图找出在模型类之间共享对象上下文的最佳方法。我确实通过SO和其他网站寻找解决方案。我理解最好的方法之一是每个HttpRequest有一个对象上下文。但是,我在网上找到的所有内容都与实体框架4.0有关。我不想将应用程序迁移到另一个版本。

请建议我可以参考的好的文档/博客/示例应用程序。这是我的第一个MVC应用程序,非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:2)

您可以在创建SSDModel对象时将Context传递给构造函数,

public class SSDModel
       private ddms_dataEntities2 db;

       public SSDModel(ddms_dataEntities2  context){
          db=context;
       }

       public ssd searchbyId(string id)
        {
            return db.ssd.FirstOrDefault(d => d.ssd_id_text == id);
        }

        public void add(ssd item)
        {
            db.AddTossd(item);
        }
}

当你要初始化sevaral模型类时,只需创建一个上下文并为所有构造函数传递它。

var ddms_dataEntities2 db = new ddms_dataEntities2();
SSDModel ssd=new SSDModel(db);
OtherModel other=OtherModel(db);

为每个请求保留上下文的一种简单方法是here 或者你可以使用IOC containers