Tag: entity framework

由于一个或多个外键属性不可为空,因此无法更改关系

在使用EF更新期间出现以下错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。 有没有一般的方法来查找哪些外键属性导致上述错误? [更新] 对于以下代码导致上述错误的一种情况(我在断开连接的环境中工作,所以我使用graphdiff更新我的对象图),当它想要运行_uow.Commit(); : public void CopyTechnicalInfos(int sourceOrderItemId, List targetOrderItemIds) { _uow = new MyDbContext(); var sourceOrderItem = _uow.OrderItems .Include(x => x.NominalBoms) .Include(“NominalRoutings.NominalSizeTests”) .AsNoTracking() .FirstOrDefault(x => x.Id == sourceOrderItemId); var criteria = PredicateBuilder.False(); foreach (var targetOrderItemId in orderItemIds) { int id = targetOrderItemId; criteria = criteria.OR(x => x.Id == id); } […]

我应该如何设置集成测试以将测试数据库与Entity Framework一起使用?

我正在为应用程序编写集成测试,但无法找到有关如何为我的集成套件设置测试数据库的最佳实践。 我正在使用Entity Framework代码优先的ASP.NET MVC4应用程序。 我可以确认我的测试项目中的测试默认与我的机器上的本地开发数据库通信。 这并不理想,因为我希望每次运行测试时都有一个新的数据库。 如何设置我的测试项目以便我的测试与单独的实例进行通信? 我假设可以设置SQL Server Compact Edition实例,但我不知道如何配置它。

EntityFramework VS纯Ado.Net

EF是如此广泛使用的员工,但我没有意识到我应该如何使用它。 我用不同的方法在不同的项目上遇到了很多关于ef的问题。 所以有些问题汇集在我脑海里。 答案让我使用纯粹的ado.net和存储过程。 所以问题是: 如何在n层应用程序中处理EF? 例如,我们有一些带有EF的DAL。 我看到很多文章和项目使用存储库,单元工作模式作为EF的某种抽象。 我认为这样的方法会杀死大多数提高开发速度并导致一些事情的好处: 重新映射EF负载导致某些DTO杀死性能(调用一些select来获取表数据 – 第一个循环,第二个循环 – 将结果映射到ef生成的某些复合类型,next – 使用linq过滤映射数据,最后映射它某些DTO)。 完全重新映射到DTO是最大的efs利益之一的杀手; 要么 导致EF(和它的版本 )和应用程序之间的强大凝聚力。 这将是类似于2层应用程序与dal和演示文稿与bll或dal与bll和演示文稿。 我想这不是最好的做法。 除了映射之外,还有与之前的事情相同的加载过程,因此再次出现性能问题。 我们可以尝试使用EF作为DAL而不需要任何抽象。 但我们会以其他方式得到类似的问题。 我应该为每个app \ thread \ atomic操作使用一个上下文吗? 使用方法 – 每个app \ thread一个上下文可能略微提高性能和调用导航属性的可能性,但我们遇到另一个问题 – 更新此上下文并在上下文中增加加载的数据,我也不确定每个app一个dbcontext的并发性线。 使用每个操作的上下文将导致我们将ef结果重新映射到我们的DTO。 所以你看到我们再次回到问题1。 我们可以尝试仅使用EF + SP吗? 我们再次提出以前的问题。 如果不使用大部分function,使用ef的原因是什么? 所以,EF是开始项目的好方法。 当我们几乎没有屏幕和粗暴操作时,它非常方便。 但接下来呢? 所有这些文字都只是未分类的想法。 我知道纯粹的ado.net会带来另一种挑战。 那么,您对此主题有何看法?

在创建模型时不能使用上下文

在我的应用程序中,我收到以下错误: 在创建模型时不能使用上下文。 我不确定这意味着什么。 我做了一切正常,通常它的工作原理,但对于这一个,它不是。 以下是我的代码: App.config中: Products.cs: class Products { public int ProductID { get; set; } public string ProductName { get; set; } } DatabaseContext.cs: class DatabaseContext : DbContext { public DbSet Products { get; set; } } Program.cs中: DatabaseContext context = new DatabaseContext(); try { var products = context.Products.ToList(); foreach (var item in […]

在.NETentity framework中调用SaveChanges时出现InvalidOperationException

我正在尝试学习如何使用entity framework,但我遇到了一个我无法解决的问题。 我正在做的是,我正在浏览我拥有的电影列表,并将每个电影插入一个简单的数据库中。 这是我正在使用的代码 private void AddMovies(DirectoryInfo dir) { MovieEntities db = new MovieEntities(); foreach (DirectoryInfo d in dir.GetDirectories()) { Movie m = new Movie { Name = d.Name, Path = dir.FullName }; db.AddToMovies(movie); } db.SaveChanges(); } 当我这样做时,我在db.SaveChanges()读取了一个exception。 已成功提交对数据库的更改,但更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。 内部exception消息:AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突。 在调用AcceptChanges之前,请确保键值是唯一的。 我无法找出造成这个问题的原因。 我的数据库表包含三列 Id int autoincrement 名称nchar(255) 路径nchar(255) 更新:我检查了我的edmx文件,SSDL部分按照建议使用StoreGeneratedPattern =“Identity”。 我也跟着博客文章,试图在CSDL中添加ClientAutoGenerated =“true”和StoreGenerated =“true”。 这导致编译错误(错误5:不允许’ClientAutoGenerated’属性。)。 […]

向entity framework添加自定义属性?

我是第一次使用entity framework,并想知道以下是否可行 – 我已经从DB生成了我的类,并且有一个名为Category的类。 显然它在表中有我的所有字段(ID,CategoryName,SortOrder等..)但我想知道我是否可以添加一个不在表中的自定义属性,但实际上是自定义方法的结果。 我想添加一个名为’CategoryURL’的新属性,它基本上是通过自定义方法运行的’CategoryName’属性,并返回一个带连字符的字符串。 我最初的想法是从生成的Category类inheritance并在里面创建这样的东西? public string CategoryURL { get{ return MyCustomMethod(this.CategoryName) } } 这是正确的方法吗? ‘this.CategoryName’会像我认为的那样工作吗? 基本上最终的结果是当我返回一个’Category’列表时,我希望它成为类的一部分,所以我可以在foreach循环中使用它。 希望这有道理吗?

entity frameworkC#插入数据俄语编码问题

我在我的项目中使用EDM模型。 当我通过邮寄请求在数据库中插入俄语单词时,我得到了?????? 控制器: [Authorize] [HttpPost] public string DescEdit(FormCollection formValues) { var CurrentUserPhoto = User.Identity.Name; string x = Request.Form[“id”]; Int64 id = Convert.ToInt64(x); photos upPhotoDesc = photosRepository.GetPhotosById(id, CurrentUserPhoto); upPhotoDesc.description = Request.Form[“value”]; photosRepository.Save(); return Request.Form[“value”]; } 在数据库中,所有字符集都设置为utf-8 在布局页面中,内容enc类型为utf-8 数据库代码: CREATE TABLE `photos` ( `id` bigint(255) NOT NULL AUTO_INCREMENT, `done` tinyint(1) NOT NULL DEFAULT ‘0’, `imgsmall` varchar(255) NOT […]

如何使用Entity Framework以DataGridView可编辑和上下文跟踪更改的方式过滤数据?

我正在使用C#Windows Form Application使用以下代码使用Entity Framework(EFWinForms)从sql server数据库表填充数据: MyEntityDataModel db = new MyEntityDataModel(); MyEDS = new EntityDataSource(); MyEDS.DbContext = db; MyDataGridView.DataSource = MyEDS; MyDataGridView.DataMember = “MyTable”; 它工作正常。 用户编辑时,添加数据; 可以使用以下代码保存数据: MyEDS.SaveChanges(); 我想要一种通过实体数据源过滤这些数据的方法,以便MyDataGridView保持可编辑状态,用户在过滤数据中完成的任何更新仍然可以保存回数据库。 注意:当使用linq to entity过滤数据时,它工作得很好,但它只是填充了用户无法再次编辑或更新的数据快照。

entity framework多个对象上下文

这个问题已经以50种不同的方式被问到了500个不同的时间……但是这里又一次,因为我似乎无法找到我正在寻找的答案: 我正在使用EF4和POCO代理。 答:我有一个从ObjectContext的一个实例获取的对象图。 该ObjectContext被释放。 B.我有一个从ObjectContext的另一个实例获取的对象。 ObjectContext也被处理掉了。 我想在A中使用B中的实体设置一堆相关的属性….类似于 foreach(var itemFromA in collectionFromA) { itemFromA.RelatedProperty = itemFromB; } 当我这样做时,我得到了例外: System.InvalidOperationException occurred Message=The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects. Source=System.Data.Entity StackTrace: at System.Data.Objects.DataClasses.RelatedEnd.Add(IEntityWrapper wrappedTarget, Boolean applyConstraints, Boolean addRelationshipAsUnchanged, Boolean relationshipAlreadyExists, Boolean allowModifyingOtherEndOfRelationship, Boolean forceForeignKeyChanges) at System.Data.Objects.DataClasses.RelatedEnd.Add(IEntityWrapper wrappedEntity, Boolean […]

无法找到请求的.Net Framework数据提供程序。 它可能没有安装

嗨,这是我第一次在远程服务器上发布一个带有entity framework的项目。 页面工作正常,但当我尝试访问我的保留区域,所以,读取dabatase,我得到此错误 无法找到请求的.Net Framework数据提供程序。 它可能没有安装。 描述 :执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息 :System.ArgumentException:无法找到请求的.Net Framework数据提供程序。 它可能没有安装。 来源错误: 在执行当前Web请求期间生成了未处理的exception。 可以使用下面的exception堆栈跟踪来识别有关exception的起源和位置的信息。 堆栈跟踪: [ArgumentException:无法找到请求的.Net Framework数据提供程序。 它可能没有安装。] System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)+1402071 System.Data.EntityClient.EntityConnection.GetFactory(String providerString)+35 [ArgumentException:在配置中找不到指定的商店提供者,或者无效。] System.Data.EntityClient.EntityConnection.GetFactory(String providerString)+62 System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)+263 System.Data.EntityClient.EntityConnection..ctor(String connectionString)+81 System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)+42 System.Data.Objects.ObjectContext..ctor(String connectionString,String defaultContainerName)+16 D:\ trust-company \ shield_trust \ shield_trust \ POCO.Context.cs中的shield_trust.db_shieldtrustEntities..ctor():23 D:\ trust-company \ shield_trust \ shield_trust \ user_login.aspx.cs中的shield_trust.user_login.check_login():65 D:\ trust-company \ […]