使用实体框架4,POCO,我对多对多插入过程并不熟悉.我有一个包含3个表的博客:发布,评论和标签. post 可以具有许多标签,并且标签可以在许多帖子中.这是 post 和标签模型: public class Tag { public int Id { get; set; } [Required] [StringLength(25, ErrorMessage = "Tag name can't exceed 25 characters.")] public string Name { get; set; } public virtual ICollection Posts { get; set; } } public class Post { public int Id { get; set; } [Required] [StringLength(512, ErrorMessage = "Title
以下是关于 entity-framework-4 的编程技术问答
我有一个枚举,我想将其作为某种值的价值持续到基础数据库中,以便我可以来回. 我已经阅读了一些文章,这些文章建议使用静态隐式运算符定义的枚举包装器,并使用复杂型对象映射进行映射,如下所述. . 如何在ef4中伪造枚举 此解决方案可完美!感谢 Alex James . 顺便说一句,我发现了/a>哪个目的似乎通过实体框架处理枚举持久性.我尝试了它,它似乎根本不起作用.这是一个代码样本. public enum StreetDirection { East , None , North , NorthEast , NorthWest , South , SouthEast , SouthWest , West } public enum StreetType { Avenue , Boulevard , Court , Crescent , Drive
我们首先使用具有外国密钥关系的实体框架代码.我们调查了处理应用程序中删除对象的方法. 当我们拥有具有子女关系的实体时,我们可以使用添加方法将对象直接添加到其偶像中.现在,当您使用删除时,您会获得错误 system.invalidoperationException出现消息=操作 失败:这种关系无法改变,因为一个或多个 外交钥匙的特性是不可删除的.当改变 关系,相关的外交属性设置为零值. 如果外国钥匙不支持零值,则是新的关系 必须定义,必须将外国钥匙属性分配另一个 非零值,或者必须删除无关的对象. 我知道这是因为删除收藏集仅通过将外键删除删除关系.我们想在我们的实体中写下我们的业务逻辑并允许删除. 因此,从订单repository的订单中删除root实体,然后调用实体的某些特定方法,例如Order.AddOrderline(Orderline orderline)这将订单线添加到订单virtual ICollection OrderLines
我有一个基于相当经典不同层的N层应用程序:用户界面,服务(WCF),业务逻辑和数据访问. database(SQL Server)显然是通过Tentity Framework询问的,问题基本上是每个调用都始于用户界面并贯穿所有层,但是我需要每次为每个操作创建一个新的ObjectContext,并且使性能非常糟糕,因为每当我需要重新加载元数据并重新编译查询时. 最建议的模式将是下面的模式,它是我实际在做的:每次服务接收呼叫 时创建和传递新上下文. public BusinessObject GetQuery(){ using (MyObjectContext context = new MyObjectContext()){ //..do something } } 对于简单查询,我看不到任何特定的dealy,它可以正常工作,但是对于复杂而重的查询,它可以进行2秒钟的查询,以保持每个电话大约15秒钟. 我可以设置Object
是否有任何明显的原因为什么通过我的实体模型调用存储过程会导致性能要慢得多? 首先,我不希望SP以恰好运行相同的速度,我知道当直接访问SP时,EF必须做的各种事情不会被调用. 除此之外,我还有一个查询,可以返回三列字符串.当我通过Enterprise Manager执行它时,它几乎立即运行.如果我通过EF运行它,则大约需要六秒钟.当然,结果被映射到复杂的类型中,但是当我通过SQL Server Profiler运行查询时,很明显延迟发生在SQL Server上: 在图中,1指示从企业管理器调用SQL,2表示使用EF. 通过我的应用调用它 我这里有什么明显的吗?我希望延迟一两秒钟,但差异似乎太大了. 编辑: 似乎在通过ado.net调用时,存储过程也缓慢运行.我的同事似乎认为这与.NET正在缓存的不良执行计划有关.通过编辑存储过程并再次保存它,似乎可以清楚地清除缓存中的内容,并且ado.net和ef呼叫对存储过程的呼叫都很好. 其他人以前有没有遇到过这
我有以下问题. 背景 我正在尝试用MVC3,EF4和JQuery在桌子上实现自动完成的选择器450万记录. 这是表: CREATE TABLE [dbo].[CONSTA] ( [afpCUIT] nvarchar(11) COLLATE Modern_Spanish_CI_AS NOT NULL, [afpNombre] nvarchar(30) COLLATE Modern_Spanish_CI_AS NULL, [afpGanancias] varchar(2) COLLATE Modern_Spanish_CI_AS NULL, [afpIVA] varchar(2) COLLATE Modern_Spanish_CI_AS NULL, [afpMonot] varchar(2) COLLATE Modern_Spanish_CI_AS NULL, [afpIntSoc] varchar(1) COLLATE Modern_Span
我的EF 4.3.1型号具有200-odd表.初始启动是可怕的,几分钟. DotTrace捕获的轮廓意味着框架中一些可怕的算法/可伸缩性选择,这是数百万呼叫在那里的许多方法和3600万个Ienumerable.contains()调用的呼叫.这是一个片段,所有这些都是由数据库上的第一个查询触发的(未来查询不执行此操作,并且很好). 我该怎么做才能减少痛苦?我可以以某种方式对此进行预编译吗?更好的是,EF团队可以解决这些问题或开源框架以便我可以吗?还是至少修复Warapper的拼写? :) 编辑:一个触发的特定EF调用基本上是var db = new MyDbContext(); db.Personnel.Where(a => a.Login == login).SingleOrDefault();. EF迁移种子()addorupdate也可以有效地生成相同的堆栈. fuller堆栈跟踪可能会提供更多的上下文,在这里:编辑:一些相关链接: msdn: msdn: EF电
我正在使用实体框架4.0,我想使用以下查询: 为此,我要做以下操作: strSQLQuery = "select * from MyTable where IDData IN (@IDs)"; lstParameters.Clear(); myParameter = new SqlParameter("@IDs", strIDs); lstParameters.Add(myParameter); myContext.MyTable.SqlQuery(strSQLQuery, lstParameters.ToArray()).ToList(); 但是我有一个例外,说不可能将nvarchar转换为bigint. 这是因为参数是类型字符串,并且表中的ID为bigint. 我尝试创建一个长列表并添加一些ID,但是我会收到其他错误. 如何在查询中使用o ids o ids作为参数? 如果可能的话,我想使用参数. 谢谢
我试图在DateTime字段的日期部分进行LINQ组. 此LINQ语句有效,但在日期和时间之前将其分组. var myQuery = from p in dbContext.Trends group p by p.UpdateDateTime into g select new { k = g.Key, ud = g.Max(p => p.Amount) }; 当我仅在日期之前将此语句运行到组时,我会收到以下错误 var myQuery = from p in dbContext.Trends group p by p.UpdateDateTime.Date into g //Added .Date on this line select new { k = g.Key, ud = g.Max(p => p.Amount) }; LINQ中不支持指定的类型成员"日期". 仅支持初
我一直在尝试实体框架4.4,NHIBERNATE 3.3.1.4000和SQL Server,我注意到在您进行更改时解决关系方面有所不同,我想知道什么是最佳练习或是否是什么?我做错了. 这是我测试的.我有一个经典的父母与n个孩子有联系.我在数据库中有2个父母,每个父母有20个孩子.我兼任父母,然后带上第一个父母的第一个孩子,并将该孩子分配为第二个父母.然后我提交更改. 在ef中,我保存后,我可以看到,父母双方的孩子收集的计数已经改变,因此它修复了关系. 但是,当我在nhibernate中做同样的事情时,计数保持不变. 这是我重现问题的代码设置. pocos: public class Parent { public virtual int ParentId { get; set; } public virtual string Name { get; set; } public virtual IList Ch
我是实体框架的新手,所以我对此一无所知.目前,我正在从事我的大学项目,在该项目中,我遇到了一个问题,其中有两个外国钥匙是指另一个表中的同一列.我该如何处理这种情况. 是否有必要为每个外部密钥创建导航属性.如果我为ContactID创建另一个Navigaton属性,则有必要在用户类中创建另一个导航属性,例如: public virtual ICollection SomePropertyName { get; set; } 请告诉我克服这个问题的最佳方法.我正在使用实体框架6. 这是我的模型类: public class BlockedUser { // User Foreign Key public int UserId { get; set; } // Composite Primary Key // User Foreign key public int Contact
我一直在听到有关实体框架流利的API的消息,但我正在努力为此找到良好的参考.这是什么? 我们使用实体框架和提供的建模工具.那是全部吗?还是有所不同? 同样,如果不是一个问题,那么Poco是什么?我知道它代表了普通的旧CLR对象,但是这对我来说是什么意思,因为已经将EF与Designer Model Tool一起使用?如果这个问题太模糊了,请忽略它.我只是在这里学习,您愿意提供的任何信息都是有帮助的. 解决方案 实体框架4.1介绍了编写数据库模型的第一种代码方法.这也称为poco(普通的旧CLR对象).想法是您可以从这些类构建数据库,而不是先构建数据库并从中创建模型. 上面有很多好的博客文章和MSDN文档.一个好的起点是 http://weblogs.asp.net/manavi/archive/2011/03/03/27/associations-in-associations-ingosociations-in--ef-4-1-code-first-fi
那么,现在对这两种产品的判决是什么?对于VS2010/.NET 4.0 ,我似乎找不到有关此问题的任何内容 回到.NET 3.5天,大多数人认为Linq2SQL在.NET 4.0出现时会死亡,但它似乎还活着. 另一方面,EF 4.0似乎已得到显着改善. 对我来说,到目前为止,我的大部分工作都是中小型项目,而我的公司正在从VS08迁移到VS10.我应该看什么?还是真的,我应该花时间学习EF4.0还是花时间更美好地研究Nhibernate? (但是回到主题上,我对Linq2Sql -ef.) 最后,我目前正在使用entlib/unity,哪个框架更友好地依赖/策略注入? 预先感谢. 解决方案 这是实体框架(V4)更好的一些原因: 1 -L2SQL本质上是过时的 2 -L2SQL不支持POCO映射,EF确实. 3- ef具有更大的灵活性(第一,模型首先,数据库首先). L2SQL只有1个. 4- ef支持sproc-> poco映射
Linq-to-SQL的相对简单性以及实体框架版本1的所有批评(尤其是无信任的投票)说服了我暂时与linq-to-sql一起去.现在EF 4.0已经熄灭了,我想知道是否该开始迁移到它了. 问题: 相对于linq-to-sql,EF 4.0的利弊是什么? EF 4.0终于准备好了? 现在是时候切换了吗? 解决方案 好吧,一个无尽的辩论: - ) 是的,我坚信EF4绝对可以为黄金时间做好准备 - 微软在解决EF的1.0版本的所有烦恼和问题方面做得非常出色. 准备好黄金时间 - 如果您需要所有功能. linq-to-sql是一个非常简单的,无弄,毫无意义的或映射器 - 它将一个数据库表映射到一个CLR对象 - 仅此而已.非常基本,非常直接 - 但在SQL Server顶部的层相当薄. 另一方面, ef4更多 您对象空间中的概念数据模型 数据库层上的存储数据模型 两个之间的映射层 数据库独立 因此,如果您确实需要支持多个数据库(而不
这三种类型的加载类型有什么区别?有人可以解释一个例子吗?在线不同的资源使用不同的定义引起的混乱比必要更多. 解决方案 懒惰的加载和延期是同义词(Afaik,如果我错了,请纠正我).渴望和懒惰之间的最大区别.急切将发生在前面发生,懒惰仅在"需要"时发生,并且执行将在数据库级别发生 - 让我们以一个简单的加入语句作为示例 var people = (from p in people SELECT p).ToList(); var jobs = (from j in jobs SELECT j).ToList(); var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList() 这是急切加载的示例.我们正在吸引所有人,所有工作,并且我们正在进行记忆中的加入. (通常)不是很聪明.这是看起来像懒惰风格的. var people = (from
我们正在将EF4&LINQ作为DB接口转移到Oracle 11g DB.该数据库设置为病例敏感,但我们需要作为病例不敏感的搜索.在Oracle中使用查询中的"上"可能非常昂贵.我已经查看了以下选项,并具有指示的结果: ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE)) generates SQL Where clause: WHERE TABLE.FIELD = VARIABLE --------------------- ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE.ToUpper())) generates SQL Where clause: WHERE TABLE.FIELD = (UPPER(VARIABLE)) --------------------- ChangeEntities.TABLE.Where(x => x.FIELD.T
如何通过实体框架自动为Oracle数据库生成身份? 我有一个可以调用并生成不在上下文中的列的函数,该函数如何通过实体框架明确调用存储过程?我正在使用存储库模式. 随机数生成器插入记录(在其中我通过UDF获取主键,然后将其传递给实体以插入). 解决方案 1)在Oracle 中创建序列 CREATE SEQUENCE dummy_test_seq MINVALUE 1 MAXVALUE 999999999999999999999999999 START WITH 1 INCREMENT BY 1; 2)创建属性 sealed public class CommonUtilities { #region Sequences public static int DummyTestSeq { get {
我正在使用EF 4(首先使用数据库,从中完全生成的模型)与Oracle 10G数据库,我对一个字段有问题. 我的字段在我的数据库中定义为NUMBER(5).在我的模型中,EF将其定义为short. 我的问题是我有一些大于32,767的值(最大最大短) 我找到了这篇文章:实体框架生成短而不是INT .我遵循该指令,它有效,我的模型现在包含INT32值. 但是我有一个新问题: Error 2019: Member Mapping specified is not valid. The type 'Edm.Int32[Nullable=True,DefaultValue=]' of member 'XX' in type 'Model.XXX' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=5,Scale=0]' of member 'XX' in t