4

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

示例模型类:

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 应用程序,任何帮助将不胜感激。

谢谢

4

1 回答 1

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);
        }
}

当您要初始化多个模型类时,只需创建一个上下文并将其传递给所有构造函数。

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

保留每个请求的上下文的一种简单方法是在这里
describerd 或者您可以使用IOC 容器

于 2012-11-13T03:51:35.223 回答