Tag: entity framework

如何将相同的列添加到EF Core中的所有实体?

想象一下,我想在我的所有实体中添加一个IsDeleted列或一些审核列。 我可以创建一个基类,我的所有实体都将从该基类inheritance,这将解决我的问题,但是我无法指定创建列的顺序,因此我将在实体的字段之前得到所有审计字段,我不想要。 我希望他们在桌子的尽头。 在标准版本的entity framework中,我们可以使用指定列顺序的注释来完成此操作。 但是,目前EF核心并不存在这样的事情。 我可以使用OnModelCreating()方法上的流畅api来做,问题是我只知道如何为我的每个实体单独执行它,这意味着我必须为我拥有的每个实体编写相同的代码。 对于我的所有实体,我有什么办法可以做到这一点吗? 某种for循环迭代遍历dbcontext上DbSets中注册的所有实体?

Linq中的Regex(EntityFramework),数据库中的字符串处理

我的表中有一列包含值的列 “FilterA:123,234,34;FilterB:12,23;FilterC:;FilterD:45;” filter由’;’分隔 并且每个filter的值由’,’分隔。 Filter的名称和值之间有一个’:’。 现在,我可以做任何只能取出值部分的东西吗? 像“FilterA”的“123,234,34”。 或者我可以给它一个像“234”这样的数字来搜索“FilterA”的值部分和/或“FilterB”的值部分中的“54”吗? 我知道使用正则表达式是可能的,我猜,但我不知道怎么做。

使用AutoMapper,“相同类型的实体已经具有相同的主键值”错误

当我使用AutoMapper时,出现此错误: 附加“MyProject.DAL.User”类型的实体失败,因为同一类型的另一个实体已具有相同的主键值。 如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。 这可能是因为某些实体是新的并且尚未收到数据库生成的键值。 在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。 我想从数据库中检索User时将User映射到UserModel。 我在UI中更改UserModel属性,然后将其再次映射到User并更新它。 我的代码在这里: public UserModel GetUserByUserId(int id) { var user = db.Users.Where(p => p.UserId == id).FirstOrDefault(); var userModel = Mapper.Map(user); return userModel; } public void Update(UserModel userModel) { var user = Mapper.Map(userModel); db.Entry(user).State = EntityState.Modified; db.SaveChanges(); } 但如果我不使用自动映射器并编写类似下面的代码,它可以正常工作。 public void Update(UserModel userModel) { updatingUser.Email = userModel.Email; updatingUser.FirstName = userModel.FirstName; updatingUser.ModifiedDate […]

EF Code First实现了接口属性

我有以下型号。 interface IKeywordedEntity { IEntityCollection Keywords { get; } } class Foo : EntityBase, IKeywordedEntity { public virtual IEntityCollection Keywords { get { … } } } class Bar : EntityBase, IKeywordedEntity { public virtual IEntityCollection Keywords { get { … } } } 我想编写一个扩展方法,在OnModelCreating为每个关键字自动处理关键字。 public static void WithKeywords(this EntityTypeConfiguration entityTypeConfiguration) where TEntityType : EntityBase, […]

在entity framework迁移期间读取数据库(选择查询)

我知道我可以使用Sql方法在迁移过程中更新数据,它对于可以在纯SQL中表达的简单事物非常有用。 我也知道我可以使用Seed方法,但这会感觉像是一个黑客(我想写的代码必须执行一次,执行迁移时)。 在我目前的情况下,我需要从列中删除HTML标记,并将其写入迁移中添加的新列。 我已经有一个C#方法就是这么做的。 我想要做的是迭代C#中的每一行,并为每一行生成一个SQL语句,该行将使用相应的HTML条带化文本更新该行。 更一般地说,我认为在迁移过程中能够在C#中读取数据库在很多情况下都很方便。 在迁移事务中这样做是完美的,但为此我需要检索Entity Framework内部用于迁移的SQL连接。 到目前为止,我发现无法执行返回结果的SQL查询。 这可能吗?

多重性和EF 6的问题

这发生在没有的地方。 我之前从未遇到过这个问题。 我刚刚在我的SQL Azure数据库中添加了一个表,该数据库将为注册我们的电子邮件列表的人保留电子邮件。 没有关联到该表的关联,它只是单独的。 我回到VS并从我的数据库更新我的模型,现在得到这些错误。 Error 1 Error 113: Multiplicity conflicts with the referential constraint in Role ‘Category’ in relationship ‘FK_Items_3’. Because all of the properties in the Dependent Role are non-nullable, multiplicity of the Principal Role must be ‘1’. C:\Users\chuyita\Documents\Visual Studio 2012\Projects\gcaMusicExchange\gcaMusicExchange\myConnection.edmx 1043 11 gcaMusicExchange 和 Error 2 Error 113: Multiplicity conflicts with […]

无法找到请求的.Net Framework数据提供程序。 程序(SqlClient)

我正在尝试使用数据库首次从SQL Server迁移(2005)来设置一个简单的ASP.NET MVC 4 webapp。 我在数据库中创建了表,并使用Entity Framework在代码中创建了对象。 我可以使用这些对象访问数据。 当我尝试使用WebSecurity.InitializeDatabaseConnection(“FLMREntities”, “UserProfile”, “UserId”, “UserName”, true);初始化WebSecurity时出现问题WebSecurity.InitializeDatabaseConnection(“FLMREntities”, “UserProfile”, “UserId”, “UserName”, true); 在Global.asax.cs文件中。 我已经尝试使用模板附带的InitializeSimpleMembershipAttributefilter并遇到了同样的问题。 我收到错误消息: Unable to find the requested .Net Framework Data Provider. It may not be installed. 这是相关的连接字符串: 此外,我在数据库中创建了成员资格表,以匹配模板创建的内容。 如果我将Initialize调用中的最后一个参数更改为false(以便它不会尝试自动创建表),则返回它无法找到UserProfile表。 我也试过名称的变体,例如[dbo]。[UserProfile]。 我只需要一个简单的帐户模型,以允许用户登录并允许某些用户查看更多内容。

具有替代触发器的entity framework

我使用EF与SQL Server数据库。 我为该视图创建了一个视图和一个Instead Of Insert触发器,如下所示: insert into Target (value, someFk) select value, 4 from inserted select id from Target where @@ROWCOUNT > 0 and id = scope_identity() 我将视图映射到EF edmx。 当我尝试添加实体时,在调用SaveChanges()时会出现以下exception: 无法更新EntitySet’TargetView’,因为它具有DefiningQuery,并且元素中不存在支持当前操作的元素。 视图在映射中标记了标识列。 有什么建议?

entity framework不为表或过程生成类

我正在使用Entity Framework在C#中生成类和函数,我需要与SQL服务器进行交互。 作为参考,这是我的一个表: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Area]( [ID] [bigint] identity (1, 1) primary key, [Name] [nvarchar](100) NOT NULL ) GO 运行实体数据模型向导(使用’数据库中的EF Designer’)后,我的项目有edmx文件和一些新的.cs文件,但似乎它没有生成它需要的一切。 例如,在我的DatabaseEntities类中,我得到了: public virtual DbSet Areas { get; set; } 但是,没有“区域”类型的定义(以及其他三种缺失类型)。 我也缺少存储过程的function。 我已经尝试删除新文件并重新运行模型向导,但我得到了相同的结果。 有没有其他人遇到这个? 图片的标题说明: 我注意到在最后几次尝试中,当向导运行时我也收到错误:“未在项目上安装Entity Framework包”。 但是,当我点击它时,它仍然生成edmx和model.context。 我对Entity Framework版本6.0.0和6.1.2都有同样的问题。 重新安装框架对问题没有影响。 更新: 卸载nuget并重新安装最新版本允许我通过nuget安装EntityFramework而不会出错。 但是,现在Add New Item对话框中缺少ADO.NET数据模型。

Enumerable.Empty ()AsQueryable已(); 此方法支持LINQ to Entities基础结构,不应在代码中直接使用

我收到运行时错误 此方法支持LINQ to Entities基础结构,不应在代码中直接使用。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:System.InvalidOperationException:此方法支持LINQ to Entities基础结构,不应在代码中直接使用。 我试图通过在所有搜索字段上添加所有匹配的记录(将执行OR而不是AND )来生成查询而不是对每个搜索条件进行过滤。 public static IQueryable ApplySearch(this IQueryable queryable, SearchModel search) where T : class { var results = Enumerable.Empty().AsQueryable(); if (search != null) { if (search.PolicyNumber.HasValue && typeof (IPolicyNumber).IsAssignableFrom(queryable.ElementType)) { results = results.Union(queryable.SearchByPolicyNumber(search)); } if (search.UniqueId.HasValue && typeof (IUniqueId).IsAssignableFrom(queryable.ElementType)) { results = results.Union(queryable.SearchByUniqueId(search)); } if (!string.IsNullOrWhiteSpace(search.PostCode) […]