Questions tagged «entity-framework»

有关ADO.NET实体框架的问题,请参阅.NET Framework的对象关系映射(ORM)工具。如果适用,请添加特定于版本的标签。请勿对实体框架核心问题使用此标签。请改用entity-framework-core。

4
实体框架linq查询Include()多个子实体
这可能是一个真正的基本问题,但是在编写跨越三个级别(或更多级别)的查询时,包括多个子实体的一种好方法是什么? 即我有4个表:Company,Employee,Employee_Car和Employee_Country 公司与员工的关系为1:m。 Employee与Employee_Car和Employee_Country的关系为1:m。 如果我想编写一个查询来返回所有4个表中的数据,我当前正在编写: Company company = context.Companies .Include("Employee.Employee_Car") .Include("Employee.Employee_Country") .FirstOrDefault(c => c.Id == companyID); 必须有一种更优雅的方式!这很长一段时间,并产生可怕的SQL 我在VS 2010中使用EF4


7
实体框架回滚并消除错误的迁移
我将EF 6.0用于C#中的项目,并进行了手动迁移和更新。我在数据库上进行了大约5次迁移,但是我意识到上一次迁移很糟糕,我不想要它。我知道我可以回滚到以前的迁移,但是当我添加新的(固定的)迁移并运行Update-Database时,甚至会应用错误的迁移。 我试图回滚到以前的迁移并删除迁移错误的文件。但是,当我尝试添加新的迁移时,更新数据库时会出错,因为迁移文件已损坏(更具体地说,第一行代码将表A重命名为B,然后是下一行,EF尝试使用名称A-可能是一些EF错误)。 我是否可以运行一些查询,该查询将告诉EF诸如“忘记上一次没有出现的上次迁移,那是很糟糕的事情”?类似于Remove-Migration。 Edit1 我发现适合我的解决方案。将模型更改为良好状态并运行Add-Migration TheBadMigration -Force。这将重新构建上一个未应用的迁移。 无论如何,这仍然不能完全回答原始问题。如果我将UpdateDatabase迁移至错误的迁移,则我没有找到好的方法来回滚并创建新的迁移,排除了错误的迁移。 谢谢

9
服务应该总是返回DTO,还是可以返回域模型?
我正在(重新)设计大型应用程序,我们使用基于DDD的多层体系结构。 我们的MVC具有数据层(存储库的实现),域层(域模型和接口的定义-存储库,服务,工作单元),服务层(服务的实现)。到目前为止,我们在所有层上都使用域模型(主要是实体),并且仅将DTO用作视图模型(在控制器中,服务返回域模型,并且控制器创建视图模型,该模型传递给视图)。 我读了无数关于使用,不使用,映射和传递DTO的文章。我知道没有明确的答案,但是我不确定是否可以将域模型从服务返回到控制器。如果我返回域模型,它仍然永远不会传递给视图,因为控制器始终会创建特定于视图的视图模型-在这种情况下,它似乎合法。另一方面,当域模型离开业务层(服务层)时,感觉不对。有时服务需要返回域中未定义的数据对象,然后我们必须向未映射的域中添加新对象,或者创建POCO对象(这很丑陋,因为某些服务返回域模型,因此某些服务有效地返回DTO)。 问题是-如果我们严格使用视图模型,是否可以将域模型一直返回给控制器,还是应该始终使用DTO与服务层进行通信?如果是这样,可以根据需要的服务来调整域模型吗?(坦率地说,我不这么认为,因为服务应该使用哪个域。)如果我们严格遵守DTO,是否应该在服务层中定义它们?(我是这样认为的。)有时候,很明显我们应该使用DTO(例如,当服务执行大量业务逻辑并创建新对象时),有时很显然,我们应该仅使用域模型(例如,当Membership服务返回贫乏的User( s)-创建与域模型相同的DTO似乎没有多大意义)-但我更喜欢一致性和良好做法。 Article Domain与DTO与ViewModel-如何以及何时使用它们?(以及其他一些文章)与我的问题非常相似,但是并不能回答这个问题。第二条我应该实现与EF存储库模式的DTO?也很相似,但不涉及DDD。 免责声明:我不打算仅仅因为它存在并且很花哨就使用任何设计模式,另一方面,我也想使用好的设计模式和实践,因为它有助于整体上设计应用程序,有助于分离的担忧,至少在目前,甚至不需要使用特定的模式。 与往常一样,谢谢。

17
“在使用ItemsSource之前,Items集合必须为空。”
我正在尝试使图像显示在WPF ListView中,样式类似于WrapPanel,如旧ATC Avalon团队文章:如何创建自定义视图中所述。 当我尝试使用LINQ-to-Entities查询的ADO.NET实体框架对象集合填充ListView时,出现以下异常: 例外 使用ItemsSource之前,Items集合必须为空。 我的代码... Visual Basic Private Sub Window1_Loaded(...) Handles MyBase.Loaded ListViewImages.ItemsSource = From g In db.Graphic _ Order By g.DateAdded Ascending _ Select g End Sub XAML <ListView Name="ListViewImages" SelectionMode="Single" ItemsSource="{Binding}"> <local:ImageView /> </ListView> 我在那条线上设置了一个断点。 ListViewImages.ItemsSource是Nothing刚刚LINQ分配之前。

14
序列化类型为'SubSonic.Schema .DatabaseColumn'的对象时,检测到循环引用。
我正在尝试做一个简单的JSON返回,但是我遇到以下问题。 public JsonResult GetEventData() { var data = Event.Find(x => x.ID != 0); return Json(data); } 我得到一个HTTP 500,但此问题的标题中显示了例外。我也试过 var data = Event.All().ToList() 那也带来了同样的问题。 这是错误还是我的实现?


11
人们应该如何使用Entity Framework 6进行单元测试?
我一般只是从单元测试和TDD开始。我以前涉猎过,但是现在我决心将其添加到我的工作流程中并编写更好的软件。 昨天我问了一个类似的问题,但这似乎是一个问题。我已经坐下来开始实现服务类,该类将用于从控制器中抽象出业务逻辑,并使用EF6映射到特定的模型和数据交互。 问题是我已经封锁了自己,因为我不想在存储库中抽象出EF(对于特定的查询,它仍然可以在服务之外使用),并且想测试我的服务(将使用EF Context) 。 我想这里是问题,这样做有什么意义吗?如果是这样的话,鉴于IQueryable造成的抽象漏洞以及Ladislav Mrnka关于单元测试的许多出色文章,人们会如何在野外进行操作,因为在处理内存中时Linq提供程序的不同实施到特定的数据库。 我要测试的代码看起来很简单。(这只是伪代码,试图了解我在做什么,我想使用TDD驱动创建) 语境 public interface IContext { IDbSet<Product> Products { get; set; } IDbSet<Category> Categories { get; set; } int SaveChanges(); } public class DataContext : DbContext, IContext { public IDbSet<Product> Products { get; set; } public IDbSet<Category> Categories { get; set; } public …



12
IEntityChangeTracker的多个实例不能引用实体对象。在实体框架4.1中向实体添加相关对象时
我正在尝试保存“员工”详细信息,其中包含“城市”的引用。但是每次尝试保存我的联系人时,都会得到验证“ ADO.Net Entity Framework一个实体对象不能被IEntityChangeTracker的多个实例引用”的异常。 我已经阅读了很多文章,但仍然不知道该怎么做...我的“保存”按钮的点击代码如下 protected void Button1_Click(object sender, EventArgs e) { EmployeeService es = new EmployeeService(); CityService cs = new CityService(); DateTime dt = new DateTime(2008, 12, 12); Payroll.Entities.Employee e1 = new Payroll.Entities.Employee(); Payroll.Entities.City city1 = cs.SelectCity(Convert.ToInt64(cmbCity.SelectedItem.Value)); e1.Name = "Archana"; e1.Title = "aaaa"; e1.BirthDate = dt; e1.Gender = "F"; …

18
实体框架:不带主键的表
我有一个现有的数据库,我想使用它来构建一个新的应用程序 EF4.0 有些表没有定义主键,因此当我创建新的实体数据模型时,会收到以下消息: The table/view TABLE_NAME does not have a primary key defined and no valid primary key could be inferred. This table/view has been excluded. To use the entity, you will need to review your schema, add the correct keys, and uncomment it. 如果我想使用它们并修改数据,是否必须将PK添加到这些表中,或者是否有解决方法以便不必这样做?


6
无法创建类型的常量值在此上下文中仅支持原始类型或枚举类型
我在下面的查询中遇到此错误 无法创建类型的常量值API.Models.PersonProtocol。在此上下文中仅支持原始类型或枚举类型 ppCombined下面是的IEnumerable对象PersonProtocolType,由2个PersonProtocol列表的concat构造。 为什么会失败?我们不能JOIN在SELECTa 内部使用LINQ 子句JOIN吗? var persons = db.Favorites .Where(x => x.userId == userId) .Join(db.Person, x => x.personId, y => y.personId, (x, y) => new PersonDTO { personId = y.personId, addressId = y.addressId, favoriteId = x.favoriteId, personProtocol = (ICollection<PersonProtocol>) ppCombined .Where(a => a.personId == x.personId) .Select( b => new …

6
不支持关键字:初始化实体框架上下文的“数据源”
我正在初始化实体框架对象上下文,这给了我关键字不受支持的错误: metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework" 我直接从正在运行的web.config中获取了连接字符串,并仅修改了文件的路径(该文件是我动态设置的),并且不使用默认值,而是明确使用了该连接字符串。是什么导致此错误?

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.