Questions tagged «entity-framework-4»

ADO.NET实体框架4.x的标记,它本身是.NET框架的对象关系映射。

4
实体框架4-AddObject与附加
我最近一直在使用Entity Framework 4,对于何时使用ObjectSet.Attach和ObjectSet.AddObject感到有些困惑。 据我了解: 当系统中已经存在实体时,使用“附加” 创建全新的实体时使用“ AddObject” 因此,如果我要创建一个新的Person,则可以执行此操作。 var ctx = new MyEntities(); var newPerson = new Person { Name = "Joe Bloggs" }; ctx.Persons.AddObject(newPerson); ctx.SaveChanges(); 如果我要修改现有的Person,请执行以下操作: var ctx = new MyEntities(); var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" }; existingPerson.Name = "Joe Briggs"; ctx.SaveChanges(); 请记住,这是一个非常简单的示例。实际上,我使用的是Pure POCO(不生成代码),存储库模式(不处理ctx.Persons)和工作单元(不处理ctx.SaveChanges)。但是,“在幕后”,以上就是我的实现过程。 现在,我的问题 …

6
EF代码优先:如何从nuget软件包控制台中看到“ EntityValidationErrors”属性?
我为此感到茫然: 我已经为实体框架(4.1.3)代码优先方法定义了我的类。一切都很好(我正在创建表等),直到我开始播种为止。 现在当我做 Add-Migration "remigrate" ; Update-Database; 我在程序包控制台上收到一个错误“对一个或多个实体的验证失败。有关更多详细信息,请参见'EntityValidationErrors'属性。” 我的Seed()方法中有一个断点,但是因为当项目未运行时我正在控制台上运行此断点,所以对于如何获得详细信息一无所知(PS-我已经看到线程验证失败了一个或多个实体,同时使用实体框架将更改保存到SQL Server数据库中,该框架显示了我如何看到该属性。) 我知道我的Seed()方法有问题,因为如果我在方法调用后立即返回,错误就会消失。那么,如何设置断点,以便查看验证错误是什么?金田迷路了。还是有其他方法可以在nuget控制台中对其进行跟踪?


5
我应该如何编辑实体框架连接字符串?
最近,我不得不编辑我的app.config文件,以更改Entity Framework数据模型(.edmx文件)的连接字符串。但是我想知道:是否可以使用设计器来编辑EF连接字符串? 原始连接字符串由“实体数据模型”向导自动生成。然后,不能更改连接字符串-在.edmx设计器的属性窗口中将其禁用。我希望避免(如果可以)手动编辑XML(在app.config中),因此我想知道是否有办法返回到原始向导屏幕来更改连接字符串并让该工具编辑app.config文件为了我。

2
实体框架-手动添加导航属性
我从数据库中生成了一个实体框架模型(4.0)。我没有设计数据库,也没有对架构的任何控制,但是有一些表没有定义外键约束,但是定义了隐式关系。 例如: 我有一个名为People的表,该表具有以下列:GenderID RaceID 有“性别”和“种族”表,但“人”表中没有外键。 当我导入模型时,它没有为这些关系添加导航属性。我尝试手动添加它,但是“从角色”和“到角色”被禁用。我不确定如何自己添加关系。我该怎么做呢?




5
保存EF4 POCO对象的更改时更新关系
实体框架4,POCO对象和ASP.Net MVC2。我有很多对很多关系,可以说BlogPost和Tag实体之间。这意味着在我的T4生成的POCO BlogPost类中,我具有: public virtual ICollection<Tag> Tags { // getter and setter with the magic FixupCollection } private ICollection<Tag> _tags; 我从ObjectContext实例中请求BlogPost和相关标签,然后将其发送到另一层(在MVC应用程序中查看)。稍后,我返回具有更改的属性和更改的关系的更新的BlogPost。例如,它具有标签“ A”,“ B”和“ C”,而新标签是“ C”和“ D”。在我的特定示例中,没有新的标签,并且标签的属性从不更改,因此唯一需要保存的是更改后的关系。现在,我需要将其保存在另一个ObjectContext中。(更新:现在我尝试在相同的上下文实例中执行此操作,但也失败了。) 问题:我无法使其正确保存关系。我尝试了所有发现的东西: Controller.UpdateModel和Controller.TryUpdateModel不起作用。 从上下文中获取旧的BlogPost,然后修改集合不起作用。(从下一点开始采用不同的方法) 这可能会起作用,但是我希望这只是一种解决方法,而不是解决方案:(。 在每种可能的组合中尝试了BlogPost和/或标签的Attach / Add / ChangeObjectState函数。失败了 这看起来像我所需要的,但是不起作用(我试图修复它,但是不能解决我的问题)。 尝试过ChangeState / Add / Attach / ...上下文的关系对象。失败了 在大多数情况下,“无效”表示我使用给定的“解决方案”,直到它不产生错误并至少保存BlogPost的属性为止。关系发生的情况各不相同:通常,标记会使用新的PK再次添加到Tag表中,并且保存的BlogPost会引用这些PK,而不引用原始的PK。当然,返回的Tag具有PK,在保存/更新方法之前,我检查了PK,它们等于数据库中的PK,因此EF可能认为它们是新对象,而这些PK是临时对象。 我知道的一个问题,可能无法找到一个自动化的简单解决方案:当更改POCO对象的集合时,上述虚拟集合属性应该会发生这种情况,因为FixupCollection技巧将在另一端更新反向引用多对多关系。但是,当视图“返回”更新的BlogPost对象时,则没有发生。这意味着可能没有简单的解决方案可以解决我的问题,但这会让我非常难过,我会讨厌EF4-POCO-MVC的胜利:(。这也意味着EF在任何MVC环境中都无法做到这一点使用EF4对象类型:(。我认为基于快照的更改跟踪应发现更改的BlogPost与具有现有PK的标签具有关系。 顺便说一句:我认为一对多关系也会发生同样的问题(谷歌和我的同事也这么说)。我会在家里尝试一下,但是即使该方法无法解决我的应用程序中的六个多对多关系:(。

15
实体框架-无效的列名“ * _ID”
我将范围缩小到“代码优先”和“数据库优先” EF之间的某个问题,但是我不确定如何解决它。我会尽量保持清楚,但老实说我本人在这里缺少一些了解。这是实体框架4.4 我继承了一个使用Entity Framework的项目,但是删除了许多实际文件,没有任何实际方法可以返回。我重新添加了EF(首先是数据库),并复制了围绕该项目构建的T4设置。它生成了所有数据库模型的代码版本和一个DBContext代码文件。 如果我的连接字符串看起来像是“正常” .NET连接字符串,则会收到有关无效列的错误消息,名称“ ProcessState_ID”不存在。ProcessState_ID根本不在代码库中,也不在EDMX文件或任何其他文件中。这似乎是查询中的某些自动EF转换。 当我使连接字符串与实体框架模型匹配时,它可以正常工作。 现在,在尝试将前面的代码与Entity Framework匹配时,我想保留“普通” .NET连接字符串。 因此,我在这里有两个问题:1.从代码中的正常连接字符串转换为EF连接字符串的最佳方法是什么?2.这里有没有我想停止无效列名错误的其他修复程序?


13
ReferentialConstraint中的从属属性映射到商店生成的列
写入数据库时​​出现此错误: ReferentialConstraint中的从属属性映射到商店生成的列。列:“ PaymentId”。 public bool PayForItem(int terminalId, double paymentAmount, eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId) { using (var dbEntities = new DatabaseAccess.Schema.EntityModel()) { int pinnumber = 0; long pinid = 1; //getPinId(terminalId,ref pinnumber) ; var payment = new DatabaseAccess.Schema.Payment(); payment.CategoryId = CategoryId; payment.ItemCategoryId = CategoryItemId; payment.PaymentAmount = (decimal)paymentAmount; payment.TerminalId = …

15
为什么会出现此错误:没有为以下EntitySet / AssociationSet-Entity1指定映射?
我正在使用带有Model First方法的Entity Framework 4。 我开始了该项目,设计了实体并生成了数据库。一切正常。 然后,我需要回去向模型添加另一个实体。但是,当我将实体拖到EDMX时,出现以下错误: 好的!我只需要将Entity1映射到表即可。我正在使用“模型优先”方法,我希望它在生成DDL时为我创建表。 如何解决此错误?

3
将Entity Framework 4中的Include与lambda表达式一起使用
我看过许多有关如何解决此问题的文章,这些文章都与CTP4有关,或者添加了我自己的扩展方法。 是否存在“官方” EF4包含方式在include(用于第一级关系以及第二级及更高级别)中使用lambda表达式,还是最终未包含在RTM中? 它只有一个-我将很高兴学习如何做,因为现在在我的代码中使用lambda表达式(使用#system.data.entity#system.data.linq)仍然可以给我: 无法将lambda表达式转换为“字符串”类型,因为它不是以下类型的委托类型: var customers = from c in context.Customers.Include(c=>c.Phone)

5
减少存储库以汇总根
目前,我几乎为数据库中的每个表都拥有一个存储库,并希望通过减少DDD使其仅聚合根来进一步使自己与DDD保持一致。 假设我有下表User和Phone。每个用户可能有一个或多个电话。没有聚合根的概念,我可能会做这样的事情: //assuming I have the userId in session for example and I want to update a phone number List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId); phones[0].Number = “911”; PhoneRepository.Update(phones[0]); 集合根的概念比实际更容易在纸上理解。我将永远不会拥有不属于用户的电话号码,因此取消PhoneRepository并将电话相关的方法合并到UserRepository中是否有意义?假设答案是肯定的,我将重写先前的代码示例。 我可以在UserRepository上使用返回电话号码的方法吗?还是应该始终返回对用户的引用,然后遍历用户之间的关系以获取电话号码: List<Phone> phones = UserRepository.GetPhoneNumbers(userId); // Or User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone 无论我以哪种方式获得电话,假设我修改了其中一部电话,如何进行更新?我有限的理解是,应该通过根目录更新根目录下的对象,这将使我朝下面的选择#1前进。尽管这可以很好地与Entity Framework一起很好地工作,但这似乎没有什么描述性,因为即使Entity Framework在图形中更改对象的选项卡上,阅读代码我也不知道我实际更新的内容。 UserRepository.Update(user); // …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.