Tag: entity framework 6

如何扩展Entity Framework 6.1.3生成的类?

是否可以扩展Entity Framework 6.1.3生成的类? 我有一个现有的数据库,我已经创建了一个ADO.NET实体数据模型,反过来Visual Studio 2015生成了一组类。 public partial class WebApplication1Entities : DbContext { public WebApplication1Entities() : base(“name=WebApplication1Entities”) { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } } 我可以手动覆盖WebApplication1Entities以允许动态运行时连接,如下所示: public WebApplication1Entities(string connectionString) : base(connectionString) { } 但是,这涉及编辑Visual Studio 2015生成的类,但是我希望将来更新ADO.NET实体数据模型,Visual Studio将覆盖我对上一个生成的类所做的任何手动更改,而我是回到原点,必须手动编辑生成的类。 是否可以创建一个辅助类或类似的东西来扩展现有的WebApplication1Entities : DbContext ,并允许添加新的重载方法,并inheritanceVisual Studio 2015生成的类的现有方法,如虚拟DbSets。 任何帮助将非常感激 :-)

entity framework(数据库优先)具有不正确的存储过程返回结果

环境: Visual Studio 2017 SQL Server 2016 EF v6采用数据库优先方法 背景:存储过程在EDMX中。 如果没有发生,我的存储过程将返回值设置为0,如果受影响,则设置为1,如果出现错误,则设置@@ ERROR的值。 背景1:我的存储过程LTM_Lease_DeleteSubFiles在顶部执行SET NOCOUNT ON ,并在存储过程结束时使用RETURN命令设置返回值。 问题1:我的调用返回-1,甚至在存储过程中都没有: var spResults = context.LTM_Lease_DeleteSubFiles(…) 背景2:我的存储过程DOIOwnerChanges_Apply在存储过程结束时使用RETURN命令设置返回值。 问题2 :我的调用返回的值8,甚至在存储过程中找不到: var spResults = context.DOIOwnerChanges_Apply(…)

如何向我未存储在数据库中的Web API响应中添加属性?

我正在使用Entity Framework 6.0构建C#Web API。 我有最简单的用户类,有3个属性,我坚持将SQL存入用户表,其中有3个相应的列,其中UserID是其主键。 public partial class User { public string UserID {get; set;} public string FirstName {get; set;} public string LastName {get; set;} } 我想在Web API中添加两个仅用于输出的属性,我不想在我的数据库中存储这些属性。 我使用这些属性与消费客户端“状态”和“消息”信息进行通信,这些信息不属于用户类。 状态=确定|错误|警告。 消息将是Web API需要与调用客户端通信的任何消息。 我的问题是:在发送回Web API的响应而不修改SQL上的基础用户表时,动态添加这两个属性的最简单方法是什么? 我知道我可以将这两个作为虚拟列添加到用户表中。 当我不需要它时,我不想在SQL端带来那些开销。

如何确定数据库中哪些字段指定为NOT NULL?

我的解决方案中有一个数据库优先,代码生成的EF数据项目。 我需要做的是确定我的模型中的哪些字段在数据库中被定义为NOT NULL (即必需)。 这对于值类型(整数,浮点数,小数等)并不困难,因为如果DB允许空值,则它们被EF代码生成器定义为可空类型。 但是,当字段是引用类型时,我无法弄清楚如何确定字段是否在数据库中定义为NULL / NOT NULL 。 这似乎是一个显而易见的问题,但我无法通过Google或其他方式找到解决方案。 使用EF模型时,如何在保存操作成功之前查询模型中是否需要填充哪些字段? 一种不同的方法 重新访问这个问题后,我想我会做一些进一步的研究。 首先,通过Visual Studio添加实体,在单步执行EF向导后,生成了一个.edmx文件。 我之前已多次访问此文件,并且我已更新并将表添加到此文件中。 今天,我决定在设计师中打开它并查看我的一些领域的一些属性。 果然,我的nvarchar NOT NULL字段上有一个名为Nullable的属性。 那么,我如何使用EF并获得Nullable属性设置为false的实体上的字段列表?

如何使用entity framework的Find方法查找List ,将Array作为参数传递?

我想知道如何使用Entity Framework的Find方法将Array( object[] )作为参数找到List ? 我想通过Primary Key查找所有数据。 我首先填写一个列表,其中包含我将用作参考的所有PK: List lCodigoServicos = new List(); foreach (ServicosSelecionadosModelView servicoSelecionado in lServicos.FindAll(s => !string.IsNullOrEmpty(s.selecionado) && s.selecionado.ToLower() == “on” )) lCodigoServicos.Add(servicoSelecionado.servico.SerId); 在填写我的PK列表后,我尝试通过PK查找所有数据 var lServicosInformados = db.Servicos.Find(lCodigoServicos.ToArray()); 当我尝试这个时,我收到以下错误: The specified parameter type ‘System.Int32[]’ is not valid. Only scalar types, such as System.Int32, System.Decimal, System.DateTime, and System.Guid, are supported. 请与我们分享如何正确地做到这一点。 谢谢。 解决方案如下所述,正确的解决方案是: […]

EF:在DbContext上禁用“AutoDetectChangesEnabled”和“ProxyCreationEnabled”时,从多对多关系创建/删除关系

知道Foo.Id和Bar.Id如何在不加载DB实体的情况下创建关系。 class Foo { public int Id { get; set; } public Lst Bars { get; set; } } class Bar { public int Id { get; set; } public Lst Foos { get; set; } } 此配置也在DbContext构造函数中禁用: Configuration.AutoDetectChangesEnabled = false; Configuration.ProxyCreationEnabled = false; Configuration.LazyLoadingEnabled = false; 以及如何删除这种关系? 例: using (var ctx = new DbCtx()) […]

ASP标识表列更改,但新列名称无法进行映射

我已经更改了asp Identity,因此在AspNetIdentity表的数据库Id列中是UserId : modelBuilder.Entity() .Property(p => p.Id) .HasColumnName(“UserId”); 这很好。 生成的表具有UserId而不是Id 。 现在我有另一个表,应该用UserId与AspNetUsers映射: 这样写时: public class JobApply { … public int UserId { get; set; } public virtual ApplicationUser ApplicationUser { get; set; } 数据库中的表格如下: 如果我这样写: public class JobApply { … public int ApplicationUserId { get; set; } public virtual ApplicationUser ApplicationUser { get; set; } […]

动态Linq +entity framework:动态选择的日期时间修改

我正在尝试找到一种方法在执行sql分组之前将UTC时间移动到Local。 我正在使用System.Linq.Dynamic(在这里管理https://github.com/kahanu/System.Linq.Dynamic )。 它非常适合进行动态选择而无需在编译时获得所需的字段。 在我们的例子中,我们以UTC格式存储所有日期时间。 在这个动态选择中,可能有人想要在小时,年,月等上进行分组。在这种情况下,我们必须将数据移动到本地时间,以防止混淆。 例: var select = queryable.Select(string.Format(“new ({0}, {1})”, datetimeColumn, someOtherColumn)); 通常在我们的tsql或甚至在使用lambda表达式的entity framework中,您可以添加所需的偏移量。 但是在动态linq选项中,您似乎无法像使用Linq2Sql那样执行任何日期操作,例如DateTime.AddHours(x)或DateTime.Subtract(x)。 entity framework6希望您使用DbFunctions.AddHours(x)等。但是动态linq代码在没有修改的情况下不会接受DbFunction而不会出错。 例: var select = queryable.Select(string.Format(“new (System.Data.Entity.DbFunctions.AddHours({0},7) as {0}, {1})”, datetimeColumn, someOtherColumn)); 返回错误:XXX类型中不存在属性或字段“System” (删除命名空间没有帮助)。 使用所需的代码: var select = queryable.Select(string.Format(“new ({0}.AddHours(7), {1})”, datetimeColumn, someOtherColumn)); 结果有错误:LINQ to Entities无法识别方法’System.DateTime AddHours(Double)’方法,并且此方法无法转换为商店表达式。 我想让SQL在groupby之前执行日期时间数学运算。 一旦groupby发生,就不再有UTC的概念,因为用户将看到本地化的结果集。 我担心我只是用一些扩展来更新我的github fork以支持传递entity framework扩展,但在我做之前,想看看是否有其他人有解决方案或想法。 注意:由于更改SQL数据存储技术的可能性,我没有使用DateTimeOffset。

EF6 – ExecuteSqlCommandAsync – 获取返回参数(声明标量变量错误)

我有以下代码: object[] parameters = { new SqlParameter(“@val1”, val1), new SqlParameter(“@val2”, val2), new SqlParameter { ParameterName = “@retVal”, SqlDbType = SqlDbType.Int, Direction = ParameterDirection.ReturnValue, Value = -1 } }; await context.Database.ExecuteSqlCommandAsync(“EXEC @retVal = Example_SP @val1, @val2”, parameters); 我正在使用的SP很好,并在SQL MS中返回一个值。 但是当我使用EF执行它时,我被告知我必须声明标量变量@retVal’。 这不是我的SqlParameter吗? 我已经尝试从参数中移除’@’符号,正如一些人在其他地方所建议的那样,但据我所知,’@’符号是可选的,无论如何都没有区别。 如何使用ExecuteSqlCommandAsync从SP获取返回值而不会导致错误? 谢谢!

EF6 – 使用基类属性在派生类中进行TPH外键映射

我将Entity Framework 6.0.2与现有数据库一起使用,其中标记存储在单个表中,如下所示: Id :int,主键 TagType :string,确定标签的类型,“usertag”或“movietag” ItemId :int,包含要引用的项的Id(用户ID或电影ID) 以下类描述了这种情况: public class User { public int Id { get; set; } } public class Movie { public int Id { get; set; } } public abstract class Tag { public int Id { get; set; } public int ItemId { get; set; } } public […]