Tag: entity framework

为什么我们不能从EntityObject获取ObjectContext

众所周知,如果我们有一个EntityObject,就无法找到它所属的ObjectContext。 这是公平的,我猜,但为什么我们可以延迟加载对象呢? 当然,延迟加载的过程必须访问ObjectContext才能加载新对象?

如何映射回来获取除MVC中的模型之外的实际sql表列名?

我将我的表列名称映射到通用方式,以便在模型中使用它们。 喜欢: public UserEntityMapper() { ToTable(“tbl_User”); HasKey(m => m.UserKey); Property(p => p.InsuredKey).HasColumnName(“User_KEY”); Property(p => p.FirstName).HasColumnName(“FIRST_NAME”); } 如果我知道在页面上使用模型修改了FirstName字段,那么需要知道sql表中的列名是’First_Name’ 无论如何接近它。 谢谢

EF Core 1.1迁移 – 当前的CSharpHelper不能支持类型的文字

这似乎是一个非常模糊的错误,我甚至不知道从哪里开始…… 当前的CSharpHelper不能支持’System.Func`3 [Microsoft.EntityFrameworkCore.Metadata.IProperty,Microsoft.EntityFrameworkCore.Metadata.IEntityType,Microsoft.EntityFrameworkCore.ValueGeneration.ValueGenerator]’类型的文字。 配置您的服务以使用可以的服务。 这是在我跑的时候发生的 dotnet ef migrations add initial 更新1 – 基于Rob的问题 应用程序的体系结构使用了丰富的域模型,因此有一些“解决方法”可以获取封装集合等内容,而Jimmy Bogard的类型枚举模式也可以使用。 每个域模型对象在数据访问层中都有自己的EntityTypeBuilder类,所有这些都是从OnModelCreating中的DbContext 。 这些也会向Console输出一些信息,因此我可以看到构建器没有导致任何错误(此时都没有错误)。 DbContext仅为聚合根实体公开DbSet ,或者以另一种方式公开,只显示具有相应存储库类的实体。 其余的域模型对象是导航属性,因此不需要通过DbContext公开DbContext 。 平台细节(据我所知) .NET Core 1.1(运行时+ SDK) EF Core 1.1 Microsoft.EntityFrameworkCore.Tools 1.0.0-preview2-final Microsoft.EntityFrameworkCore.Design 1.0.0-preview2-final

MVC 5 UserManager:实体类型ApplicationUser不是当前上下文的模型的一部分

我正在尝试(但没有)将MVC UserManager实现到我的网站。 我认为我的案子相当微不足道。 我有一个User类(entity framework – 数据库优先),其中包含所有用户的信息。 并非用户中的每个用户都可以访问该网站。 所以在我的ApplicationUser中有一个指向这个类的链接。 在代码中它看起来像这样: public partial class User { public int Id { get; set; } public string Firstname { get; set; } public string Lastname { get; set; } public string Email { get; set; } } public class ApplicationUser : IdentityUser { public virtual Entities.User UserInfo { […]

从SQL Server存储过程获取值输出到变量

这似乎是一个简单的问题,但我还没有找到答案。 我有以下存储过程 CREATE PROCEDURE [dbo].[AllocateId] AS BEGIN TRANSACTION UPDATE TOP(1) IdReservation SET IsAllocated = 1 OUTPUT DELETED.Id WHERE IsAllocated = 0 COMMIT TRANSACTION GO 它已经在C#+ EF代码中使用,没有问题通过ObjectContext的ExecuteFunction ObjectResult objectResult = ExecuteFunction(“AllocateId”); 但是,当我尝试直接从SQL脚本调用它时,它似乎不起作用 declare @Id int EXEC @Id = [dbo].[AllocateId] @Id始终为0.如何在sql脚本中将值输入@Id变量?

使用entity framework进行向下转型

我有一个项目,我在EF中将Employer定义为User的派生类。 在我的过程中,我创建一个用户,而不知道它最终是否会成为雇主(或其他类型的用户),之后我需要转换它。 起初我尝试过(Intellisense表示存在显式转换): Employer e = (Employer) GetUser(); 但在运行时我得到了: Unable to cast object of type ‘System.Data.Entity.DynamicProxies.User_7B…0D’ to type ‘Employer’. 所以我试着写一个转换器: public partial class User { public static explicit operator Employer(User u) { 但我得到错误: Error 21 ‘User.explicit operator Employer(User)’: user-defined conversions to or from a derived class are not allowed C:\Users\..\Documents\Visual Studio 2010\Projects\..\Website\Models\EF.Custom.cs 精细。 然后我重载了Employer的构造函数,如下所示: public […]

entity framework4 TPHinheritance,如何将一种类型转换为另一种?

我已经找到了一些有关这方面的信息,但还不足以让我理解这种情况的最佳实践。 我有你的典型TPH设置与抽象基类“公司”。 我有几个孩子“小公司”,“大公司”等inheritance自公司。 实际上,我实际上对公司有不同的现实分类,但我试图在这个例子中保持简单。 在根据TPH的数据库中,我有一个具有FirmTypeId列(int)的Firm表,用于区分所有这些类型。 一切都很好,除了我要求允许用户将一种类型的公司改为另一种公司。 例如,用户在添加公司时可能会犯错,并希望将其从Big Firm更改为Small Firm。 因为entity framework不允许将区分数据库列暴露为属性,所以我不相信有一种方法可以通过EF将一种类型更改为另一种类型。 如果我错了,请纠正我。 我看到它的方式我有两个选择: 不要使用TPH。 只需拥有一个公司实体并返回使用.Where(FirmTypeId == something)来区分类型。 使用context.ExecuteStoreCommand直接执行SQL以更新数据库的FirmTypeId列。 我看过一篇post,人们认为OOP的一个原则是实例不能改变它们的类型。 虽然这对我来说很有意义,但我似乎无法连接点。 如果我们遵循这个规则,那么唯一一次使用任何类型的inheritance(TPH / TPT)就是确定一种类型永远不会被转换为另一种类型。 因此,小公司永远不会成为一家大公司。 我看到应该使用构图的建议。 即使它对我没有意义(意思是我没有看到一家公司如何拥有一家大公司,对我来说,一家大公司是一家公司),我可以看到如果数据在哪里,可以如何在EF中建模组合。多个表格。 但是,在我在数据库中有一个表的情况下,它似乎是TPH或我在上面#1和#2中描述的内容。

我是否在依赖关系或主体上定义了两个实体之间的关系?

使用entity framework时,我对在两个实体之间定义关系的位置感到困惑。 我觉得无论何时我寻找例子,我最终都会从两个不同的角度找到相同事物的例子 – 依赖→校长,以及校长→依赖。 鉴于以下实体: class Foo { public int Id { get; set; } public virtual ICollection Bars { get; set; } } class Bar { public int Id { get; set; } public Foo Foo { get; set; } public virtual Baz { get; set; } } class Baz { public int […]

当标识列不唯一时,entity framework会错误地映射数据

没有进入“为什么”,只需了解inheritance和我必须使用的:) 我有一个映射到视图的EF6 edmx。 其上没有标识列,因此为了使EF映射实体,选择第一个非空列作为PK。 这背后的原始想法是只读它不会更新或删除。 没有过滤(ODATA位于此之上), 唯一的 – 我只是意味着 – 使用的方式是从实体中select top N * 。 视图中有4条记录。 TypeCode | Contact | UserID | LocaleID | EntityName ——————————————————— 1 6623 1032 9 Jane 1 6623 1032 9 Jane 1 6623 1032 9 John 1 6623 1032 9 John 我看到的问题是EF将所有4行映射相同。 上面所有“约翰”的名字都变成了“简” 好的,抛开设计决策,并且视图上没有识别记录,为什么EF映射最后两行错误? 我最初的想法是,因为“PK”被设置为TypeCode它不知道如何做到这一点。 但是,为什么只在从数据库中读取结果时才使用键列? 我原以为它只对更新和删除很重要

使用Entity Framework异步方法和SQL Server Compact阻止行为

我有一个MVVM应用程序调用数据服务来获取一些数据绑定。 数据服务通过Entity Framework 6访问SQL Server Compact(v4.0)数据库。 数据(当前)需要几秒钟才能加载,当同步调用时(这并不奇怪)会阻止GUI线程。 我假设大部分都是IO绑定所以我添加了一个等效的Async方法以异步方式执行数据加载,以允许GUI保持响应。 但是,当我使用EF Async方法时,它似乎没有任何区别,GUI线程仍会阻塞大致相同的时间。 我知道使用Async调用不会将工作移动到不同的线程,但是我已经假定这个活动的大部分是IO绑定的。 因此,使用EF Async方法应该允许调用(GUI)线程继续做其他工作,但它没有任何区别。 例如,如果我编写LoadData方法以使用EF同步加载方法,则GUI将阻塞,直到加载数据: public ObservableCollection GetData() { //Do IO bound activity… Context.DataTable1.Include(…).Load(); //for demo purposes, just return some data return Context.DataTable1.Local; //(ObservableCollection) } 加载数据的Async方法如下所示: public async Task<ObservableCollection> GetDataAsync() { //Do IO bound activity… var task = Context.DataTable1.Include(…).LoadAsync(); await task; //for demo purposes, just return […]