标签: objectcontext

c#在多线程服务器中使用Entity Framework

在多线程服务器中使用实体框架的最佳实践是什么?我正在使用实体框架ObjectContext来管理我的所有数据库操作,现在我知道这个上下文不是线程安全的,所以现在当我需要使用它来执行一些数据库操作时,我用lock声明来包围它是安全的.这是我应该怎么做的?

c# database multithreading entity-framework objectcontext

41
推荐指数
3
解决办法
4万
查看次数

使用Dbcontext执行ExecuteStoreQuery

我想使用ExecuteStoreQueryEntity Framework的功能,我想知道我的上下文变量没有ExecuteStoreQuery方法.

所以,我发现它是一种ObjectContext类的方法,但我已经用于DbContext我的应用程序了.我根本就试图改变DbContextObjectContext,但它带来了一些错误(例如,在ObjectContext的不是OnModelCreating方法).

我如何使用ExecuteStoreQueryDbContext,如果我不能,是ExecuteStoreQueryDbContext的任何替代品?

c# linq entity-framework objectcontext dbcontext

24
推荐指数
2
解决办法
2万
查看次数

什么是背景?

我开始在任何地方看到上下文.在ASP.NET MVC中,有ControllerContexts,RequestContexts,HttpContexts,FormContexts.在Entity Framework中,您有ObjectContexts和DbContexts.Ninject有Ninject.Activation.IContext.

什么是背景?

asp.net-mvc httpcontext controllercontext objectcontext dbcontext

22
推荐指数
1
解决办法
1047
查看次数

实体框架中的提供者连接字符串

如果使用对象上下文数据模型(使用EDMX文件),则在创建期间可能需要在配置文件中指定连接字符串.

遗憾的是,连接字符串不是公共连接字符串,因为它包含实体连接所需的一些内容.MySql连接示例:

<add name="MyDbEntities" connectionString="metadata=res://*/Namespace.MyDb.csdl|res://*/Namespace.MyDb.ssdl|res://*/Namespace.MyDb.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=172.17.17.154;User Id=user;password=password;Persist Security Info=True;database=MyDatabase;Convert Zero Datetime=true&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是此连接字符串包含参数"provider connection string"中提供程序的连接字符串.

出于特定原因,我需要创建一个与实体模型无关的新MySqlConnection.为了创建MySqlConnection,我需要为它提供mysql连接字符串 - 这是实体模型的提供者连接字符串,我知道我需要的连接字符串始终是实体模型的相同连接字符串.

但是如何获得提供程序连接字符串programmaticaly?我被困在浏览模型实例但没有成功......

下列:

ModelInstance.Connection.ConnectionString
Run Code Online (Sandbox Code Playgroud)

包含类似"name = TestBotEntities"的内容,甚至不包括整个连接字符串.所以我尝试过:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString
Run Code Online (Sandbox Code Playgroud)

但那个包含整个实体连接字符串,我只是不知道如何解析它,如何只从它获取提供者连接字符串.

c# entity-framework edmx objectcontext

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

实体框架中的'ObjectContext'与'DbContext'

我正在使用DbContext基于Generic Repositories和Unit of Work设计模式创建的代码中的类.(我在这里遵循指导.)在这个项目上工作时,我遇到了这个ObjectContext课程.

我读过相当数量的讨论帖子ObjectContextDbContext.虽然我读过的一些内容是有道理的,但我仍然没有完全理解这些差异,这让我对我当前的实现感到疑惑.我应该使用DbContext,ObjectContext还是两者兼而有之?使用其中一个现在被认为是反模式?

.net entity-framework objectcontext dbcontext

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

实体框架 - 我的对象上下文在哪里?

好吧,我显然遗漏了一些非常基本的东西.我是Entity Framework的新手.

我想调用存储过程而不导入它们,所以我打算使用ExecuteStoreQuery().根据文档,ExecuteStoreQuery是ObjectContext的一种方法.但是,我不知道从哪里获取我的ObjectContext.

我使用Database First生成了我的entites.到目前为止,我一直在访问我的实体,如下所示:

var db = new MyEntities();

PRODUCT p = db.PRODUCTS.First(a => a.PRODUCTSKEY == thekey);
Run Code Online (Sandbox Code Playgroud)

但是我不能调用db.ExecuteStoreQuery,因为db不是ObjectContext.

我已经用Google搜索了如何从实体获取ObjectContext.我找到了一些答案,但是他们都被警告,并说这是一种解决方法,只有在没有其他选择时才使用它.好的,那么正确的方法是什么?

我发现使用ExecuteStoreQuery的所有示例都假设您已经拥有了ObjectContext.不是很有帮助.

我发现一个网站声明ObjectContext是由Entity Framework"自动生成"的.如果是这样,那么它在哪里?

我显然在这里遗漏了一些非常简单的东西.这不是那么困难.

entity-framework objectcontext

16
推荐指数
2
解决办法
3万
查看次数

如何从db刷新ObjectContext缓存?

我们正在从db加载数据:

var somethings = Context.SomethingSet.ToList();
Run Code Online (Sandbox Code Playgroud)

然后有人删除或添加上下文之外的行.Out上下文仍然有缓存已删除的对象,因为它不知道它们已被删除.即使我调用Context.SomethingSet.ToList(),我们的上下文仍包含已删除的对象,导航属性也不正确.

从数据库刷新整个集合的最佳方法是什么?

.net c# entity-framework objectcontext

15
推荐指数
2
解决办法
2万
查看次数

为什么在使用ADO.NET Entity数据模型映射数据库表时,Entity Framework会自动使用ObjectContext而不是DbContext

我首先遵循数据库方法; 我在SQL Server 2008数据库中创建了表,然后使用ADO.NET实体数据模型将这些表映射到Entity Framework类.但是当我打开designer.cs文件时,我在自定义的类定义中找到了以下代码:

public partial class PortalEntities : ObjectContext
Run Code Online (Sandbox Code Playgroud)

所以我有以下三个让我困惑的问题:

  1. 为什么我的PortalEntities班级来自ObjectContext而不是DbContext我期望的?

  2. ObjectContext&之间是否存在重大差异DbContext,或者它们主要相同并提供相同的功能

  3. 当我尝试编写类似于以下代码的内容时:

    Student student = db.Students.Find(id);
    
    Run Code Online (Sandbox Code Playgroud)

我发现我不能使用.Find(),因为我曾经用做方法DbContext,那么,这是否意味着,ObjectContextDbContext有,我可以用不同的方法?

BR

asp.net entity-framework objectcontext asp.net-mvc-3 dbcontext

13
推荐指数
1
解决办法
7999
查看次数

自跟踪实体 - AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突

我已经被这个问题困住了一个多星期了.希望有人能指出我正确的方向.

我首先简要介绍一下我的架构.

资产1 ---> 1地址* - > 1区* - > 1区* - > 1国家

套餐1 - >*资产

使用自我跟踪实体(STE)+ WCF.

脚步:

  1. 调用数据存储以获取资产列表.
  2. 调用数据存储以获取包列表.
  3. 用户选择一个包并为其分配一些资产.
  4. 保存包裹.

在步骤2中,呼叫使用预先加载的地址.

from p in context.Assets.Include("Address.Area.Region.Country")
Run Code Online (Sandbox Code Playgroud)

这是尝试呼叫时的错误

context.Packages.ApplyChanges(package)
Run Code Online (Sandbox Code Playgroud)

AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突.在调用AcceptChanges之前,请确保键值是唯一的.

编辑

在窥探之后,我发现这是一个STE问题.问题是您无法持久存储包含此处概述的同一实体的多个实例的图形.这是我的问题.

如何将实体添加到我的实体集合中.新实体可能具有包含与集合中已有密钥相同的密钥的相关实体.即添加可能包含相同地址,区域,地区或国家/地区实体的新资产.

这是我的约束:

  1. 我必须使用导航集合,因为它会影响UI.
  2. 我无法预先获取将涉及的所有实体,因为数据集太大了.
  3. 我必须能够随时拍摄实体的快照以保留历史记录并使用它来"撤消"任何更改.

我知道Diego B Vega建议的可能解决方案,但这些不是我可以用于我的解决方案的选项.有没有人有任何其他想法?

wcf entity-framework self-tracking-entities objectcontext

12
推荐指数
2
解决办法
2万
查看次数

如何使用ObjectContext删除对象列表?

假设你有这样的代码.

using (CustomerContext db = new CustomerContext())
{
   var foundCustList=db.Customers.Where(c=>c.State=='-1').ToList();//Find all the customer which State is -1
   foreach(var c in foundCustList)
   {
       db.DeleteObject(c);
   }
   db.SaveChanges();//After all the customer is deleted, Commit.
}
Run Code Online (Sandbox Code Playgroud)

但我想知道有没有办法轻松删除对象列表?我不想foreach一个接一个地使用它来做列表.谢谢.

entity-framework objectcontext

12
推荐指数
3
解决办法
2万
查看次数