标签: objectcontext

自跟踪实体 - 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万
查看次数

ASP.Net Entity Framework,objectcontext错误

我正在构建一个4层ASP.Net Web应用程序.这些图层是:

  1. 数据层
  2. 实体层
  3. 业务层
  4. UI层

实体层具有我的数据模型类,并使用T4模板(POCO)从数据层中的实体数据模型(edmx文件)构建.实体层在所有其他层中引用.

我的数据层有一个名为SourceKeyRepository的类,它具有如下函数:

public IEnumerable<SourceKey> Get(SourceKey sk)
{
    using (dmc = new DataModelContainer())
    {
        var query = from SourceKey in dmc.SourceKeys
                    select SourceKey;

        if (sk.sourceKey1 != null)
        {
            query = from SourceKey in query
                    where SourceKey.sourceKey1 == sk.sourceKey1
                    select SourceKey;
        }

        return query;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我不希望我的查询在此应用程序的其他层中运行,因此禁用了延迟加载.尝试访问UI层中的信息时,我收到以下错误:

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

我确定这是因为我的DataModelContainer"dmc"被处理掉了.如何从我的数据层返回此IEnumerable对象,以便它不依赖于ObjectContext,而只依赖于DataModel?

有没有办法限制延迟加载只发生在数据层?

.net lazy-loading objectdisposedexception objectcontext

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

从ObjectContext获取DBContext

我正在使用最新版本的ASP.NET MVC,SQL Server和Entity Framework.我没有先使用代码.

我可以使用我的EDMX文件生成的类轻松创建对象上下文.

但有没有办法DBContext从该类中获取对象?我想使用它的扩展功能.

entity-framework objectcontext dbcontext

11
推荐指数
1
解决办法
7722
查看次数

实体框架 - 从数据库刷新对象

我在刷新数据库中的对象时遇到问题.我有两个PC和两个应用程序.

在第一台PC上,有一个与我的数据库通信的应用程序,并将一些数据添加到Measurements表中.在我的另一台PC上,有一个应用程序可以在一个计时器下检索最新的测量,所以它应该在我的第一台PC上检索应用程序添加的测量结果.

问题是它没有.在我的应用程序启动时,它会缓存数据库中的所有数据,并且永远不会添加新数据.我使用Refresh()方法,当我更改任何缓存数据时它很有效,但它不刷新新添加的数据.

这是我应该更新数据的方法:

    public static Entities myEntities = new Entities();

    public static Measurement GetLastMeasurement(int conditionId)
    {
        myEntities.Refresh(RefreshMode.StoreWins, myEntities.Measurements);

        return (from measurement in myEntities.Measurements
                where measurement.ConditionId == conditionId
                select measurement).OrderByDescending(cd => cd.Timestamp).First();
    }
Run Code Online (Sandbox Code Playgroud)

PS应用程序在app.config中有不同的连接字符串(同一个数据库的不同帐户).

database wpf entity-framework objectcontext

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

使用'DbContext'代替'ObjectContext'总是更好吗?

我刚刚下载了EntityFramework.dll v4.3.我发现了一些用于比较的问题DbContextObjectContext.但其中大部分来自2010年或2011年初.

我想更多地了解这个主题.具体来说,有没有DbContext可以拿到书的书?我还想知道,截至今天,DbContext将它与其哥哥比较时有哪些局限性ObjectContext

我意识到它DbContext更紧凑,因为它暴露更少的属性.这告诉我,我应该从中迁移ObjectContext.但是,如果我进行此迁移,我会放弃任何功能吗?例如,我读过DbContext没有STE(自跟踪实体)功能.这是否仍然适用,这是一个问题吗?

objectcontext dbcontext entity-framework-4.3

10
推荐指数
1
解决办法
7227
查看次数

通过实体框架添加"产品"的3种方法.有什么不同?

阅读这篇题为"使用ObjectSet(实体框架)"的MSDN文章它显示了两个如何添加产品的示例..一个用于3.5,另一个用于4.0.

http://msdn.microsoft.com/en-us/library/ee473442.aspx

由于我缺乏知识,我可能在这里完全遗漏了一些东西,但我从未添加过这样的产品:

   //In .NET Framework 3.5 SP1, use the following code: (ObjectQuery)
   using (AdventureWorksEntities context = new AdventureWorksEntities())
   {
      // Add the new object to the context.
      context.AddObject("Products", newProduct);
   } 

   //New in .NET Framework 4, use the following code: (ObjectSet)
   using (AdventureWorksEntities context = new AdventureWorksEntities())
   {
      // Add the new object to the context.
      context.Products.AddObject(newProduct);
   }
Run Code Online (Sandbox Code Playgroud)

我不会这样做,只是使用:

   // (My familiar way)
   using (AdventureWorksEntities context = new AdventureWorksEntities())
   {
      // Add the new object to the context.
      context.AddToProducts(newProduct);
   } …
Run Code Online (Sandbox Code Playgroud)

linq-to-entities entity-framework objectcontext

9
推荐指数
1
解决办法
1517
查看次数

C#Entity Framework 4导航属性导致提交性能降低

我为这个问题缺乏细节而道歉 - 我需要帮助的第一件事就是知道在哪里寻找更多细节.

我有一个enity框架4导航属性的问题,显然在提交更改时导致性能不佳:

this.ObjectContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

当其中一个导航属性(收据表)包含大约8000行(这不是很多,所以应该没问题)时,需要30多秒.

我使用过SQL分析器,可以看到EF从Receipts发出select*并且它非常慢:

exec sp_executesql N'SELECT 
[Extent1].[Id] AS [Id], 
// full field list cut for brevity 
FROM [dbo].[Receipts] AS [Extent1]
WHERE [Extent1].[WarehouseId] = @EntityKeyValue1',
N'@EntityKeyValue1 int',@EntityKeyValue1=1
Run Code Online (Sandbox Code Playgroud)

目前,当调用ObjectContext.SaveChanges()时,我甚至无法理解为什么需要从该表中选择所有行.

它确实需要在此表中插入1行,但这并不能解释为什么它首先执行select - 并且不能解释为什么select会花费这么长时间(同一查询在查询管理器中占用<1秒)

所以我现在的问题 - 我还不知道问题是什么 - 是:

  • 我在哪里/如何查找有关该问题的更多详细信息?我无法调试到ObjectContext.SaveChanges(),所以我不知道它内部发生了什么.
  • 为什么EF会尝试从收据中选择*?
  • 为什么这么慢?复制+粘贴到查询管理器的完全相同的查询几乎是即时的

编辑:

我已经通过注释掉对此方法的调用来确认收据代码很慢:

    private void AddReceipt(PurchaseInvoice invoice, 
                               PurchaseInvoiceLine invoiceLine)
    {
        if (invoice != null && invoiceLine != null)
        {
            Product product = invoiceLine.Product;
            if (product != null)
            {
                Receipt receipt = new Receipt{ foo = bar }; …
Run Code Online (Sandbox Code Playgroud)

c# sql-server performance entity-framework objectcontext

9
推荐指数
1
解决办法
2417
查看次数

实体框架4.1 - 刷新不是Context的成员

我正在尝试使用Context.Refresh方法恢复上下文更改,但似乎Refresh不是Context的成员.

我正在使用Microsoft ADO.NET Entity Framework 4.1 RC版本.

任何的想法?

entity-framework objectcontext

9
推荐指数
1
解决办法
5762
查看次数

编译查询没有对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万
查看次数