标签: objectcontext

实体框架 - objectcontext处置异常

我一直在调试这个程序没有任何结果,不幸的是我无法看到问题的根源.我得到了这个异常:ObjectContext实例已被释放,不能再用于需要连接的操作.

有2个表: - CustomerSet - OrderSet

Orders表中名为Customer_id的字段可确保表之间的关系,并且Orders表中还有一个名为Customer的虚拟导航属性.

方案如下:我在Orders表中插入一个元素:

Order order = new Order();
Order.order_id = GenerateId(IdType.Order);
Order.date = DateTime.Now;
Order.Customer_id = GetCustomerId(tbCustomerName.Text);
Insert(order);
Run Code Online (Sandbox Code Playgroud)

在Insert方法中,在using语句中有DBContext,因此它在需要时自动处理.我在这里工作.

之后,我需要来自先前插入元素的数据(例如,我需要Customer字段的一些属性).现在我希望Customer领域有价值:

Order o = GetOrder(order.order_id);
Run Code Online (Sandbox Code Playgroud)

我在Customer字段中得到了一个例外:o.Customer抛出了'System.ObjectDisposedException'类型的异常

我正在玩懒惰的装载,打开或关闭它,但我没有锻炼.情况是一样的......

我该弄什么?

真正的好处在于,如果我一步一步地使用F11,它通常可以正常工作!

请帮忙!先感谢您.

c# frameworks entity objectdisposedexception objectcontext

6
推荐指数
1
解决办法
1万
查看次数

带有StructureMap(IoC)的IQueryable存储库 - 我如何实现IDisposable?

如果我有以下存储库:

public IQueryable<User> Users()
{
   var db = new SqlDataContext();
   return db.Users;
}
Run Code Online (Sandbox Code Playgroud)

我知道只有在触发查询时才会打开连接:

public class ServiceLayer
{
   public IRepository repo;

   public ServiceLayer(IRepository injectedRepo)
   {
       this.repo = injectedRepo;
   }

   public List<User> GetUsers()
   {
       return repo.Users().ToList(); // connection opened, query fired, connection closed. (or is it??)
   }
}
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,我还需要使我的Repository实现IDisposable吗?

Visual Studio Code Metrics当然认为我应该.

我正在使用IQueryable因为我将查询控制到我的服务层(过滤器,分页等),所以请不要就我使用它的事实进行架构讨论.

BTW - SqlDataContext是我的自定义类,它扩展了Entity Framework的ObjectContext类(所以我可以拥有POCO派对).

所以问题 - 我真的必须实现IDisposable吗?

如果是这样,我不知道这是如何可能的,因为每个方法共享相同的存储库实例.

编辑

我正在使用Depedency Injection(StructureMap)将具体的存储库注入服务层.这个模式跟随app堆栈 - 我正在使用ASP.NET MVC,并且具体服务被注入到控制器中.

换一种说法:

  1. 用户请求URL
  2. 创建控制器实例,该实例接收新的ServiceLayer实例,该实例是使用新的Repository实例创建的.
  3. 控制器调用服务上的方法(所有调用使用相同的Repository实例)
  4. 一旦请求被提供,控制器就消失了.

我正在使用混合模式将依赖项注入我的控制器,根据StructureMap文档,这些实例将存储在HttpContext.Current.Items中.

所以,我不能这样做:

   using (var repo = new …
Run Code Online (Sandbox Code Playgroud)

structuremap idisposable iqueryable repository objectcontext

5
推荐指数
1
解决办法
1507
查看次数

确保实体框架始终从数据库读取?

我有这个应用程序,它实际上是两个应用程序,一个 web 应用程序和一个控制台应用程序。控制台应用程序用作 Windows 机器上的计划任务,每天执行 3 次以执行一些重复性工作。这两个应用程序使用相同的模型和存储库,它们放置在单独的项目(类库)中。问题是,如果控制台应用程序需要对数据库进行一些更改,它会更新模型实体并将更改保存到数据库,但是当发生这种情况时,webb 应用程序中的上下文不知道这一点,因此对象上下文不会刷新新的/更新的数据和应用程序的用户无法看到更改。

我的问题是:有没有办法告诉 objectcontext 总是从数据库加载数据,无论是在孔 objectcontext 上还是针对特定查询?

/问候文布拉德

entity-framework entity-framework-4 objectcontext

5
推荐指数
1
解决办法
4763
查看次数

从实体对象获取ObjectContext引用的最快方法是什么?

我正在为我的EntityFramework对象创建扩展,如如何:自定义生成的数据对象中所述,但在某些扩展中,我需要获取实例的ObjectContext来查找模型中的其他一些值.我已经找到了提示24 - 如何从实体获取ObjectContext,但这是几年前编写的,这在类似的SO问题中被引用,但我真的希望现在有更好的答案.

当然,这必须是经常需要的东西,以便使用官方方法支持从实体本身检索实体的对象上下文.

提前感谢您提供有关此实施的最新信息.

c# entity-framework-4 entityobject objectcontext

5
推荐指数
1
解决办法
4453
查看次数

MVC 3 - ObjectContext实例已被释放,不能再用于需要连接的操作

我对C#和MVC很新,我一直在创建自己的小博客网站作为测试项目.虽然大多数事情都在发挥作用,但我在从LINQ查询中选择多个列时遇到了问题.只有在关于SO的问题上磕磕绊绊之后我才意识到我可以使用生成的实体类作为强类型模型来处理这个问题.我需要这个,因为我一直在创建一个数据库层(这也是我之前没有用过的东西)并试图通过该层传递匿名类型不起作用.我理解为什么会这样,所以我很满意我正朝着正确的方向前进.

然而,这种方法似乎给了我另一个问题.我尝试过一个简单的测试,从我的Categories表中检索2列:CategoryID和Name.我最初尝试了以下内容:

using (MyEntities db = new MyEntities())
{
    var model = from c in db.Categories
                select new Category { CategoryID = c.CategoryID, Name = c.Name };

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

这给了我在尝试迭代视图中的模型时ObjectContext被置错的错误.在阅读完这个问题后,我尝试将return语句移到using块之外,并在模型上调用AsEnumerable(),如下所示:

IEnumerable<Category> model;

using (MyEntities db = new MyEntities())
{
    model = from c in db.Categories
            select new Category { CategoryID = c.CategoryID, Name = c.Name };
}

return View(model.AsEnumerable());
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在视图中迭代模型时,这仍然给我相同的ObjectContext处置错误.所以现在我不明白我为什么会收到这个错误.我甚至尝试完全删除using指令,但这给了我一个不同的错误:

"无法在LINQ to Entities查询中构造实体或复杂类型'MyProjectModel.Category'."

如果有帮助,这是我的观点的相关代码:

@model IEnumerable<MyProject.Models.Category>

@foreach (var category in Model)
{
    <p>@category.Name</p>
}
Run Code Online (Sandbox Code Playgroud)

有人会善意地告诉我我错过了什么吗?

谢谢.

c# dispose objectcontext asp.net-mvc-3

5
推荐指数
1
解决办法
7202
查看次数

是否在ObjectContext中没有DbContext函数?

Microsoft有一篇介绍DbContext功能的介绍文章.

其中一些,比如我在ObjectContext中没有看到的过滤相关实体.

这个功能对于DbContext来说真的是新功能而在ObjectContext中不可用吗?其他"新"功能是什么?或者DbContext只是与ObjectContext具有相同功能的简化API?

c# entity-framework objectcontext dbcontext

5
推荐指数
1
解决办法
1055
查看次数

如何创建Entity Framework ObjectContext?

我在一个SQL服务器中有很多数据库.我将connectionString作为模板(看看Initial Catalog={0})放入web.config中.

<add name="ent" connectionString="metadata=res://*/ent.csdl|res://*/ent.ssdl|res://*/ent.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=1.1.1.1;Initial Catalog={0};Persist Security Info=True;User ID=user;Password=pass;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

我想用正确的connectionString创建objectContext.我想要做以下事情,CreatObjectContext<SiteEntities>('MySite')但我得到错误Unable to determine the provider name for connection of type 'System.Data.EntityClient.EntityConnection'.

public T CreatObjectContext<T>(string dbName) where T : ObjectContext, new()
{          
       var conStr = ConfigurationManager.ConnectionStrings["ent"].ConnectionString;
       var entityBuilder = new EntityConnectionStringBuilder(conStr);
       entityBuilder.Provider = "System.Data.SqlClient";
       // Build correct conString to the db
       entityBuilder.ProviderConnectionString = string.Format(entityBuilder.ProviderConnectionString, dbName);

       var connection = new EntityConnection(entityBuilder.ConnectionString);                          
       var builder = new ContextBuilder<T>();

       return builder.Create(connection);           
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?我如何创建上下文?

entity-framework entity-framework-4 objectcontext c#-4.0

5
推荐指数
1
解决办法
1万
查看次数

EntityFramework 4,DbSet和ObjectContext

几天前,我阅读了关于GenericRepository和Unit Of Work模式的教程http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of -work-patterns-in-an-asp-net-mvc-application.我使用Web表单,我安装了EntityFramework CTP4包.(我不能使用EF 5).

我想为我的项目编写通用存储库代码,但我被困在这一行:

this.dbSet = context.Set<TEntity>();
Run Code Online (Sandbox Code Playgroud)

我知道这行不起作用,因为在我的项目和数据库中首先使用ObjectContext.我怎么处理它?我可以编写通用存储库而无需先迁移到代码(在我的情况下这不是一个选项)吗?

entity-framework objectcontext

5
推荐指数
1
解决办法
7472
查看次数

MVVM +实体框架架构混乱

我在WPF应用程序中使用Prism框架和EF.

视图模型:

  • 保持服务引用(由unity容器传递).

服务:

  • 正在提供数据的"高级"操作
  • 保留Repository的引用,它提供了对数据库的基本CRUD操作(每个存储库的单个表).

库:

  • 存储库中的每个方法都使用"使用"模式,我使用短期对象上下文.

这就是我被困住的地方:在处理了对象上下文之后,我不能再使用映射的属性了.我的数据库模型很复杂(许多相关表),并且在检索数据时会有许多.Include()调用使代码变脏.

在阅读了几个主题后,我发现"工作单元"模式可能就是我所需要的.

这是我的问题:

谁继续参考工作单元(以及上下文)?如果我选择每个视图的上下文方法,viewModel应该有上下文引用.我怎样才能将工作单元注入我的服务呢?或者我应该在ViewModel中创建新的Service实例并在构造函数参数中传递上下文?

entity-framework mvvm unit-of-work objectcontext

5
推荐指数
1
解决办法
1261
查看次数

EF6不支持上下文类型'System.Data.Entity.Core.Objects.ObjectContext'

我有一个使用Visual Studio 2013和ADO.NET实体数据模型(EF6)创建的新项目.

现在我必须使用一些动态数据功能(比如访问MetaTable对象),所以我添加了这段代码:

MetaModel model = new MetaModel();
        model.RegisterContext(() =>
        {
            return ((System.Data.Entity.Infrastructure.IObjectContextAdapter)new KiwiJuiceEntities()).ObjectContext;
        }, new ContextConfiguration() { ScaffoldAllTables = true });
Run Code Online (Sandbox Code Playgroud)

但我有这个错误:

Type of context 'System.Data.Entity.Core.Objects.ObjectContext' is not supported
Run Code Online (Sandbox Code Playgroud)

请注意,该项目的参考已更新为EF6(system.data.entity.core)

c# asp.net entity-framework objectcontext

5
推荐指数
1
解决办法
1万
查看次数