问题标签 [entity-framework-5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
18754 浏览

entity-framework-5 - Entity Framework 5.0 处理乐观并发异常?

在处理多个潜在异常时,context.SaveChanges()其中一个异常是OptimisticConcurrency. 微软在http://msdn.microsoft.com/en-us/library/bb399228.aspx上的文档讨论了 EF 4.x 的这个......

...但是在 EF 5.0 (RC) 上,这似乎不起作用,因为在我的 EF5、代码优先、DbContext 派生类Refresh()中不存在。context

我确实看到context.Entry(context.SalesOrderHeaders).Reload();了-但这似乎是直接从数据库重新加载,而不是刷新/合并(策略客户端获胜)。

任何想法如何处理 EF5 中的乐观并发异常?实际上,即使是关于 SaveChanges() 中异常处理的一般指针也会很好

谢谢

0 投票
2 回答
4340 浏览

.net - Entity Framework Code First: One-to-One where PK is a FK

I'd like to map a one-to-one relationship using Entity Framework 5 Code First like this:

Note that database Profile table schema has a primary key UserId that's a foreign key to Users table.

I'd like to know if I can avoid an artificial identifier in Profiles table.

Thank you in advance!



UPDATE

Well, it seems that both answers of Eranga and hvd are useful. With some own contribution, I got a transaction creating an user with the belonging profile successfully.

  • hvd => There's no need of the artificial identifier in the object model.
  • Erlanga => Your approach works BUT it forces you to have an [Id] column in the database.

Does anyone found a way of avoiding the artificial identifier even in the database table?

0 投票
1 回答
512 浏览

asp.net-mvc - EF + SQL Server:代码优先或数据库优先

我有一个用 ASP.Net 2.0 Web 窗体编写的系统。与 MySQL 服务器对话的框架非常酷。它读取服务器表单标签或面板内的所有控件,并对目标表执行 CRUD 操作。

当我创建 CRUD 页面时,我只需要在数据库 user{id,name,password,createdate} 中创建表,我只需要使用 id 作为表中的确切列名。控件可以是页面上的输入/选择/选项/检查框/文本区域甚至是FCK编辑器或CK编辑器。框架循环访问面板内的所有控件并保存/编辑/删除。如果我想添加一些新的字段,电子邮件和移动,我只需要在页面上添加两个控件并在表格中再添加两列。就是这样。我不必更改 page.aspx.cs 文件、实体层、业务层或数据访问层中的任何内容。它非常易于实施和维护。

我们想升级系统以使用 ASP.Net 4 MVC3 和 Entity Framework CT5。我们将从头开始重建整个系统。我希望这里的一些专家能给我一些指示。我找到了以下两个选项来重建系统。

1. Code First 我们的新系统将执行与上述框架完全相同的操作。它将遍历所有 Request.Forms 数据并将它们与数据库中的关联表映射并保存/更新/删除所有数据。为此,视图将发布表单数据,控制器将接受带有实体类的值并通过 EF 将它们保存到数据库中。我仍然需要创建 ViewModel 类来在 View 上显示数据。如果有任何更改,例如向用户页面添加电子邮件和移动字段,我仍然需要更改三个位置视图,实体(域类)和 ViewModel。我不必更改数据库中的任何内容,因为 EF 会自动运行 ALTER TABLE 来添加两个新字段。我仍然无法弄清楚如何最小化实体和视图模型类的需求。

2. Database First 我真的不喜欢这种方式,但如果这个解决方案提供更灵活的操作,我会喜欢。我将在数据库中创建列,系统将动态创建 ViewModel(我仍在研究如何做到这一点)读取表中的所有列,并在页面上显示数据。当视图发布数据时,它需要动态创建实体类并将更改保存到数据库中。

编辑:升级当前系统的原因。

  • 我们想利用 .Net 4、Linq、Entity Framework、不显眼的 javascript 库、更容易处理 JSON 数据、远程验证(我们可以在当前系统中使用 RequireFieldValidator、RegExValidator 但它们是有限的,例如:验证输入复选框和选项),使用 var 和接口进行鸭式输入。
0 投票
1 回答
1833 浏览

ef-code-first - 应用程序重新启动时实体框架 5 Code-First 删除/重新创建数据库

我正在试验最新的 EF 5 CF(在 VS2010 中,而不是在 VS2012 中)。我通常遵循 MSDN EF 5.0 快速入门:使用代码优先创建模型...

我的 DbContext 不是使用控制台应用程序,而是在 Windows 服务中,它最终将通过托管 WCF 服务来公开各种数据服务方法(客户端将是 WPF MVVM)

在 Windows Service 的 OnStart 中,我调用了 SetInitializer,然后做一个简单的查询来触发初始化:

正如预期的那样,EF CF 从模型中创建数据库并为其播种。

但是当我停止/重新启动服务时,EF 似乎会删除数据库并重新创建它(或者它可能只是删除表并重新创建它们?)。我对数据库所做的所有初始化后更改都消失了,只存在“种子”数据。

我使用过 EF 4.1 和 4.3,但从未见过这种行为。任何想法在哪里看???

爸爸猫

编辑:我在发布此内容后发现了问题......快速启动代码将数据库初始化策略设置为 DropCreateDatabaseAlways。

这就是我在不仔细查看的情况下复制/粘贴代码所得到的!

直流

0 投票
1 回答
5038 浏览

entity-framework - 具有多个上下文的 EF 5 代码优先迁移?

我们的应用程序在同一个应用程序数据库中有两个上下文。每个上下文在它们的关注点分离中被清晰地划分。

现在看来,如果我有两个上下文,Context1 和 Context2,并且如果我只更改 Context2 的类,EF 5.0 甚至认为 Context1 也发生了变化。这似乎使 EF 5.0 感到困惑,并且似乎触发了两者的迁移。在那次错误检测之后,产生的迁移也不一致。由于这一点以及我们自己的疏忽,我们处于一个奇怪的死胡同,很可能不得不重新重建整个数据库:((上下路径不一致)

所以,问题:

  1. EF 5.0 是否支持多个上下文的模型更改检测和迁移?在考虑在这里提问之前,我阅读了这个 EF 4.3 stackoverflow 问题以及Rowan 的这篇 MSFT 帖子。我不认为这是重复,因为 EF 4.3 => EF 5.0 改进的目标是代码优先和迁移。
  2. 如果没有,你们什么时候(MSFT/Rowan!)计划支持它?

谢谢

背景故事详情(可略过):

我们通过代码优先的 fluent api 仔细设置了两个“模式”,添加了测试数据,对其进行了测试,然后添加了“实时”(alpha 阶段)数据。Context1 包含关键的“实时”信息,因此我们保持不变,然后我context2通过向代码第一类添加一个新成员(以 db 术语表中的新列)修改了第二个上下文(此处)。当我运行该应用程序时,它似乎检测到两者都已更改!最后,考虑到不会调用未更改的 Context1,我们没有注释掉 Database.SetInitializer<Context1>(new DropCreateDatabaseIfModelChanges<Context1>());我们在启动期间添加的内容。所以它消灭了我们现在重要的桌子!是的,我们应该把它去掉,因为简单地锁定类定义还不够好。

0 投票
5 回答
14360 浏览

unique-constraint - Entity Framework 5 是否支持唯一约束?

想知道 Entity Framework 5 是否支持实体属性的唯一约束?如果是这样,我如何指定属性应该是唯一的?

0 投票
1 回答
360 浏览

entity-framework - 如何在 EF 中使用/持久化 POCO 对象关系?

我有一些看起来像这样的 POCO 对象:

每个 Foo 对象只有一个 Bar(反之亦然)。

现在我想创建一对新的 Foo/Bar 对象。所以我这样做(这是我怀疑我出错的地方):

正如您可能知道的那样,我希望因为我 "添加" foo, thenbar也将被添加,因为它是同一个对象图的一部分,但不:它没有被添加 - 也没有在FooId之后Bar更新对象的调用SaveChanges(尽管IdFoo 对象的 已更新)。

所以,我的猜测是这种行为是因为我正在处理 POCO 而不是 EF 代理对象,因此没有“管道”来完成这项工作。我可以IdFoo对象中获取 并手动将其存储在Bar对象中(反之亦然)并进行更多调用SaveChanges,但显然这不是正确的方法。

所以,大概我需要创建 EF 代理对象而不是裸 POCO 对象。最好的方法是什么?

0 投票
1 回答
18316 浏览

entity-framework - Entity Framework 5.0 RC - 包管理器命令“添加迁移”由于据称缺少配置类型而失败

使用 Entity Framework 5.0.0 RC/EF 5.x DbContext Generator for C#/Visual Studio 2012 RC/.NET 4.0,我试图在我的项目中启用自动迁移。我enable-migrations在包管理器控制台中运行:

如您所见,它没有自动检测我的 DbContext 派生类型,但我通过在生成的代码文件中输入此类型的名称很容易地解决了这个问题,Migrations/Configuration.cs.

但是,下一步,Package Manager Console 命令enable-migrations由于找不到上一步添加的迁移配置类型而失败。

我该如何解决这个问题?

编辑:我发现我可以使用参数指定配置类型的名称-ConfigurationTypeName

这仍然不起作用,但至少它阐明了为什么add-migration保释,即它认为Test.Migrations.Configuration不是迁移配置类型。鉴于它是由 enable- 生成的,有没有人知道为什么它不被接受migrations?请参阅下面生成的代码以供参考(UserModelContainer 派生自 DbContext):

0 投票
1 回答
464 浏览

metadata - 如何将 EFv5 的 dbGeography 空间数据类型与 WCF RIA 域服务类一起使用

我正在使用现在具有地理数据类型的 EFv5。所以我有一个名为 Place 的实体,它有一个名为 geoLocation 的属性,它属于地理类型。VS 2012 已自动为该实体创建代码,并且该地理类型的属性类型已声明为 System.Data.Spatial.DbGeography。所以一切正常。

但是,当我添加域服务类并勾选包含我的地点实体时,解决方案将停止编译,因为 domainservice.metaData.cs 文件似乎无法为地理类型创建属性。我收到“实体‘SilverlightApplication1.Web.Place’的属性‘GeoLocation’的类型不受支持”错误消息。

那么如何在我的域服务类中包含这个地理数据类型呢?

我试图手动将属性添加到创建的元数据文件中,但我仍然收到相同的错误消息。

0 投票
1 回答
1140 浏览

entity-framework - Entity Framework 5 的新迁移功能是否完全支持枚举更改?

假设我们有以下简单模型:

实体框架在向数据库添加新Car对象时,会将CarType枚举值存储为整数。

如果我们CarType以整数值更改的方式更改枚举(更改顺序或添加/删除值),Entity Framework 是否知道如何使用 Migrations 正确处理数据迁移?


例如,假设我们添加了另一个值CarType

这对数据库中的现有数据没有实际影响。0还在Car1现在还在Truck。但是如果我们改变 的顺序CarType,像这样:

1使用asCarType指定的数据库记录Truck是不正确的,因为根据更新的模型1是 now Van