我正在开发一个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应用程序,非常感谢任何帮助。
由于
答案 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。