我正在创建一个委托来检索数据库中的所有专辑记录.我在另一个项目中使用了相同的方法,但由于某种原因我这次收到错误.
我错过了一步吗?我不确定为什么会出现这个错误.
码
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
可以在不使用TypeMock Islolator的情况下完成吗?我在网上找到了一些建议,比如传递一个只有元数据的连接字符串,但是除了TypeMock之外我没有遇到任何东西似乎真的允许一个模拟的ObjectContext,它可以注入服务进行单元测试.我是不是为了TypeMock而追上了$$,还是有其他选择?有没有人设法创建任何类似于开源的TypeMock?
我已创建以下内容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) 我正在进行一个批处理过程,它从一个缓慢的遗留数据库(每个记录获取时间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个左右的记录.但是,内存使用量仍在不断增加.
以下是我的潜在问题:
我想到的一个可能的解决方案是以某种方式释放实体使用的内存,我知道我永远不会再次触摸,因为它们已经更新(比如清除缓存,但只针对特定项目),但我不知道如果甚至可以使用Entity Framework.
有人有想法吗?
c# entity-framework memory-management out-of-memory objectcontext
我尝试将实体框架添加到控制台应用程序:我按"添加新项目"和

然后

然后




然后我添加了代码:
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)
它没有出错,但我没有看到数据库有任何变化.我在这里更好地描述了这个问题
我的应用程序中有多个存储库.我应该把ObjectContext放在哪里?现在,我ObjectContext ctx;在每个存储库中都有一个引用.什么是最聪明,最安全的方法?
c# entity-framework repository repository-pattern objectcontext
场景:尝试从一个数据库中提取和重新排列信息.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) 在我的项目中,我使用实体框架4.0作为ORM来持久化SQL Server中的数据.
我的项目是来自应用程序的功能区,其中包含网格视图和主窗体中的导航树,其顶部带有功能区面板.我的应用程序基本上是一个CRUD UI,只有很少的业务逻辑.
作为第一次使用EF,我通过在编排形式(主窗体或显示为用户应用程序的窗体)中创建并保持objectContext的实例作为成员变量并将查询绑定到网格视图来开发此项目.
对于各种事件,如功能区面板按钮单击,网格视图行单击等,我打开另一个窗体表单.在该窗口窗体中,我创建了另一个对象上下文并存储在该窗体类的成员变量中.
我读过很少的博客和问题,如:
一组作者建议共享对象上下文,而其他作者建议短期和非共享.
我达到了这种混乱状态,因为我现在处于这样一种状态,即我在其中一个子窗体中对objectContext所做的更改并未反映显示它的父窗体.我试图刷新但仍然没有用.仅仅为了一个实验,我通过构造函数注入分享了我在大多数父类中首次创建的objectContext,并解决了我的更改反射问题.
将我的所有子表单转换为共享objectContext对我来说是一项巨大的工作.但如果值得,我准备好了.我不确定分享它的潜在问题是什么?
我可能会选择objectContext的静态实例,因为我没有将它用于Web而不是计划多线程方案.如果需要,我可以成为一个单身人士.
我的问题:
项目和环境的详细信息如下:
在搜索和阅读许多问题和博客文章之后,我发布了这个帖子.我读的越多,它就越容易混淆:)如果我要离开某人想要回答的话,请耐心等待.如果通过评论提出这样的澄清,我会尝试更新问题.
我一直在调试这个程序没有任何结果,不幸的是我无法看到问题的根源.我得到了这个异常: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,它通常可以正常工作!
请帮忙!先感谢您.
我有这个简单的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?
objectcontext ×10
c# ×8
asp.net ×3
dbcontext ×2
.net ×1
database ×1
datasource ×1
entity ×1
frameworks ×1
linq ×1
mocking ×1
repository ×1
typemock ×1