标签: objectcontext

编译查询没有对ObjectContext的隐式引用转换

我正在创建一个委托来检索数据库中的所有专辑记录.我在另一个项目中使用了相同的方法,但由于某种原因我这次收到错误.

我错过了一步吗?我不确定为什么会出现这个错误.

        public static readonly Func<CodySolutionEntities, IQueryable<Album>> SelectAlbums =
        CompiledQuery.Compile<CodySolutionEntities, IQueryable<Album>>(
            query => from q in query.Albums.Include("Photo")
                     select q);
Run Code Online (Sandbox Code Playgroud)

错误

错误1类型'CodyData.Diagram.CodySolutionEntities'不能用作类型 parameter 'TArg0' in the generic type or method 'System.Data.Objects.CompiledQuery.Compile<TArg0,TResult>(System.Linq.Expressions.Expression<System.Func<TArg0,TResult>>)'. There is no implicit reference conversion from 'CodyData.Diagram.CodySolutionEntities' to 'System.Data.Objects.ObjectContext'. C:\Users\Cody\Documents\CMBS\CodySolution\CodyData\Delegates\PhotoDelegates.cs 13 13 CodyData

c# asp.net compiled-query objectcontext

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

EF4 - 可以模拟ObjectContext进行单元测试吗?

可以在不使用TypeMock Islolator的情况下完成吗?我在网上找到了一些建议,比如传递一个只有元数据的连接字符串,但是除了TypeMock之外我没有遇到任何东西似乎真的允许一个模拟的ObjectContext,它可以注入服务进行单元测试.我是不是为了TypeMock而追上了$$,还是有其他选择?有没有人设法创建任何类似于开源的TypeMock?

entity-framework typemock mocking objectcontext

7
推荐指数
1
解决办法
7366
查看次数

如何将EF Code First DbContext绑定到Asp.Net DataSource?

我已创建以下内容Context以与Entity Framework Code First一起使用:

public class Context : DbContext
    {
        public DbSet<Animal> Animals { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

现在我想Context在Asp.Net应用程序中使用它来使用a 执行CRUD操作GridView.我需要创建一个DataSource来做数据绑定.我该怎么办?

ASP部分看起来像这样:

<asp:GridView runat="server" DataSourceID="animalDataSource" DataKeyNames="AnimalID" AutoGenerateColumns="false">   
    <Columns>
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:CommandField ShowCancelButton="true" ShowEditButton="true" ShowDeleteButton="true" />
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

c# asp.net entity-framework datasource objectcontext

7
推荐指数
1
解决办法
4676
查看次数

实体框架从上下文中删除对象,但不从数据库中删除

我正在进行一个批处理过程,它从一个缓慢的遗留数据库(每个记录获取时间1.4-2ms ......它加起来)转储~800,000条记录到MySQL中,它可以执行得更快一点.为了优化这一点,我一直在将所有MySQL记录加载到内存中,这使得使用量大约为200MB.然后,我开始从遗留数据库转储并更新记录.

最初,当这将完成更新记录时,我会调用SaveContext,然后使我的内存从~500MB-800MB跳到1.5GB.很快,我会失去内存异常(运行的虚拟机有2GB的RAM),即使我要给它更多的RAM,1.5-2GB仍然有点过分,这只是一个乐队 - 问题.为了解决这个问题,我开始每10,000条记录调用一次SaveContext,这有点帮助了一些事情,因为我使用委托来从遗留数据库中获取数据并在MySQL中更新它,因此我没有收到太可怕的性能影响.在保存时等待5秒左右,然后在内存中更新已经备份的3000个左右的记录.但是,内存使用量仍在不断增加.

以下是我的潜在问题:

  • 数据以任何顺序来自遗留数据库,因此我无法对更新进行分块并定期释放ObjectContext.
  • 如果我事先没有从MySQL中获取所有数据,而是在记录的更新过程中查找它,那就非常慢.我事先把它全部抓住,把它投到一个由主键索引的字典中,当我更新数据时,我从字典中删除了记录.

我想到的一个可能的解决方案是以某种方式释放实体使用的内存,我知道我永远不会再次触摸,因为它们已经更新(比如清除缓存,但只针对特定项目),但我不知道如果甚至可以使用Entity Framework.

有人有想法吗?

c# entity-framework memory-management out-of-memory objectcontext

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

如何将实体框架添加到控制台应用程序(包含图像)

我尝试将实体框架添加到控制台应用程序:我按"添加新项目"和 在此输入图像描述

然后 在此输入图像描述

然后

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

然后我添加了代码:

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Database1Entities db = new Database1Entities();
                db.AddToTableTest(new TableTest { name = "name" });
                db.SaveChanges();

                int count = db.TableTest.Count();
                int ui = 9 + 0;
            }
            catch (Exception e)
            {

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

它没有出错,但我没有看到数据库有任何变化.我在这里更好地描述了这个问题

c# database asp.net entity-framework objectcontext

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

C#/ EF和存储库模式:将ObjectContext放在具有多个存储库的解决方案中的位置?

我的应用程序中有多个存储库.我应该把ObjectContext放在哪里?现在,我ObjectContext ctx;在每个存储库中都有一个引用.什么是最聪明,最安全的方法?

c# entity-framework repository repository-pattern objectcontext

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

使用ObjectContext和DbContext

场景:尝试从一个数据库中提取和重新排列信息.DB A有一些我想要的数据.我想将它以稍微不同的结构存储在DB B上.

DB AI使用EDMX数据库生成的模型,因此它使用ObjectContext的衍生物.DB BI希望生成代码.所以我通过包管理器安装EntityFramework 4.1来使用代码/模型第一种方法.所以DB B使用DbContext派生

当我尝试将信息从DB A存储到DB B时,它说:

测试方法RoutIT.Irma.Import.Service.Test.ImportIrma2ProductTests.ImportProducts抛出异常:System.ArgumentException:找不到"DB A的EDMX模型中的某个实体"的概念模型类型

它实际上是在将DB B实体添加到DB B的Derived DbContext的DbSet属性时执行的.所以代码就像

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
            foreach (FirstPVC pvc in pvcs)
            {
                this._irmaImport.FirstPVCs.Add(pvc); <--
                this._irmaImport.SaveChanges();
            }
            scope.Complete();
        }
 }
Run Code Online (Sandbox Code Playgroud)

它发生在上面箭头标记的代码中的点("< - ")

FirstPVC是一个DB B属性,但在箭头点它抱怨没有属于DB B上下文的实体的概念模型.

这很奇怪,因为我尝试将DB B实体存储到DB B上下文.为什么要关心DB A的实体呢?

所有上下文都包含在同一个项目中.但是DB B的Derived DbContext只知道它自己的DbSet <>属性,突然在尝试向DbSet <>属性添加内容时,它会给我上面的粗体错误.

谁知道为什么会这样?为什么DbContext要关心另一个上下文的实体,特别是ObjectContext派生类之一.

Perhapse有用的是注意到它抱怨的实体看起来有点像这样

[EdmEntityTypeAttribute(NamespaceName="Irma2Model", Name="AccessProvider")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class AccessProvider : EntityObject
{
    /*****...... ******/
}
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework objectcontext dbcontext

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

实体框架ObjectContext共享 - 优点和缺点

在我的项目中,我使用实体框架4.0作为ORM来持久化SQL Server中的数据.

我的项目是来自应用程序的功能区,其中包含网格视图和主窗体中的导航树,其顶部带有功能区面板.我的应用程序基本上是一个CRUD UI,只有很少的业务逻辑.

作为第一次使用EF,我通过在编排形式(主窗体或显示为用户应用程序的窗体)中创建并保持objectContext的实例作为成员变量并将查询绑定到网格视图来开发此项目.

对于各种事件,如功能区面板按钮单击,网格视图行单击等,我打开另一个窗体表单.在该窗口窗体中,我创建了另一个对象上下文并存储在该窗体类的成员变量中.

我读过很少的博客和问题,如:

  1. 如何确定objectcontext的生命周期
  2. 实体框架和ObjectContext n层架构

一组作者建议共享对象上下文,而其他作者建议短期和非共享.

我达到了这种混乱状态,因为我现在处于这样一种状态,即我在其中一个子窗体中对objectContext所做的更改并未反映显示它的父窗体.我试图刷新但仍然没有用.仅仅为了一个实验,我通过构造函数注入分享了我在大多数父类中首次创建的objectContext,并解决了我的更改反射问题.

将我的所有子表单转换为共享objectContext对我来说是一项巨大的工作.但如果值得,我准备好了.我不确定分享它的潜在问题是什么?

我可能会选择objectContext的静态实例,因为我没有将它用于Web而不是计划多线程方案.如果需要,我可以成为一个单身人士.

我的问题:

  1. 为我的情况分享或不共享ObjectContext?
  2. 如果不分享,我如何解决我目前使用其他更改更新一个objectContext的问题?
  3. 如果要分享 - 这会更好吗?静态还是单身还是其他什么?

项目和环境的详细信息如下:

  • 的WinForms
  • C#
  • VS 2012
  • EF 4.0,使用数据第一种方法创建的模型.

在搜索和阅读许多问题和博客文章之后,我发布了这个帖子.我读的越多,它就越容易混淆:)如果我要离开某人想要回答的话,请耐心等待.如果通过评论提出这样的澄清,我会尝试更新问题.

entity-framework-4 objectcontext

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

实体框架 - 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万
查看次数

dbcontext和objectcontext中的NULL处理

我有这个简单的LINQ查询

from e in Employees 
where e.DesignationID !=558
select e
Run Code Online (Sandbox Code Playgroud)

DesignationID是一个可以为空的字段:

objectcontext查询中被翻译为:

SELECT 
[Extent1].[EmployeeID] AS [EmployeeID], 
[Extent1].[EmployeeCode] AS [EmployeeCode], 
[Extent1].[EmployeeName] AS [EmployeeName],
[Extent1].[DesignationID] AS [DesignationID] 
FROM [dbo].[setupEmployees] AS [Extent1]
WHERE 558 <> [Extent1].[DesignationID]
Run Code Online (Sandbox Code Playgroud)

虽然其中的相同查询dbcontext被翻译为:

 SELECT 
    [Extent1].[EmployeeID] AS [EmployeeID], 
    [Extent1].[EmployeeCode] AS [EmployeeCode], 
    [Extent1].[EmployeeName] AS [EmployeeName],
    [Extent1].[DesignationID] AS [DesignationID] 
    FROM [dbo].[setupEmployees] AS [Extent1]
 WHERE  NOT ((558 = [Extent1].[DesignationID]) AND ([Extent1].[DesignationID] IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)

为什么objectcontext处理NULL不同于dbcontext

c# linq entity-framework objectcontext dbcontext

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