问题标签 [ef4-code-only]

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 投票
1 回答
3424 浏览

code-first - 从 IQueryable 访问 DbContext

我正在尝试实现可能需要利用 Redis 的缓存模式。这种模式的问题是我需要禁用 Configuration.ProxyCreationEnabled 然后重新启用它以避免跨网络场的任何问题。

我想做的是从 IQueryable 访问 DbContext ,这样我就可以一次而不是到处执行此操作。最简单的方法是将正在使用的 DbContext 传递到我的缓存扩展中,但是我遇到了这篇文章:

访问 IQueryable 后面的 DataContext

有没有一种方法可以使用 EF 4.1 Code Fist(DbSet 等)以与上述链接类似的方式访问 DbContext?

我试图自己找到这个,但很难使用反射从 IQueryable 中引用的 DbSet 中找到基类。

0 投票
1 回答
5283 浏览

entity-framework-4 - DbContext SaveChanges 语句执行顺序

我有一个表,该表在具有序数列的表上具有唯一索引。因此,例如该表将具有以下列:

表 ID、ID1、ID2、序数

唯一索引跨 ID1、ID2、Ordinal 列。

我遇到的问题是,当从数据库中删除记录时,我会重新排序序数,以便它们再次连续。我的删除功能将如下所示:

问题是,当我调用 Context.SaveChanges() 时,它会破坏唯一索引,因为它似乎以与传递语句不同的顺序执行语句。例如,会发生以下情况:

  1. 重新排序序数
  2. 删除记录

代替:

  1. 删除记录
  2. 重新排序序数

这是 EF 的正确行为吗?如果是,有没有办法覆盖这种行为来强制执行顺序?

如果我没有正确解释这一点,请告诉我......

0 投票
2 回答
120 浏览

entity-framework-4.1 - 如何将实体添加到多个表?

我的数据库中有 2 个表:StudentsStudentsHistory. 这个想法是表中的每一次更改都Students必须在表中创建一个新记录StudentsHistory(例如,当我编辑一个学生时,必须执行 2 个操作:对学生进行更新和对学生历史进行插入)。

如何在创建 2 个类并映射它们的情况下使用 Entity Framework 4.1 Code-First 执行此操作?我只想Student上课,并以某种方式告诉 EF 将 Student 对象保存到 2 个表中。

任何人都可以帮忙吗?

PS它应该在代码中完成,而不是使用SQL触发器或其他东西。

0 投票
2 回答
2727 浏览

c# - 实体框架 4.1 代码优先和自动映射器问题

考虑这个简单的模型和视图模型场景:

出现的问题是:

我有一个不需要公司的编辑页面,所以我不从数据库中获取它。现在,当提交表单时,我会:

然后我做一个

问题是即使我将 oldCompany 分配给我的公司,在 savechanges 之后它在数据库中仍然为空。

笔记:

如果我更改这些行:

对这些:

请注意,我更改了 2 次状态,它工作正常。可能是什么问题?这是 ef 4.1 的错误吗?

这是解决该问题的示例控制台应用程序:

0 投票
1 回答
168 浏览

entity-framework - 是否有停止 EF 4.2 向自动生成的表名和列名添加空格的“数据库级”方法?

我在纯代码“模式”中使用 Entity Framework 4.2。我让它从模型中自动生成我的数据库。

但是,它会根据标题大小写在我的表和列名中添加空格——例如,一个CustomerOrder类被映射到一个[Customer Orders]表,一个ProductNumber属性被映射到一个[Product Number]字段。

有什么方法可以防止这种情况发生 - 没有通过 Fluent API 配置每个表和属性名称(我知道该怎么做)?

这是4.2的新东西吗?

0 投票
1 回答
136 浏览

ef-code-first - 客户端上的仅 EF 代码继承

(对不起,我的英语不好)

在 Silverlight 4 + RIA Services + EF4 Code Only 应用程序中,我的 DbContext 上有一些包含“IsActive”字段的类 - 我想从客户端了解实体是否具有此字段并获取它。我的第一个想法是使用接口:

这在服务器上工作正常,但在客户端上,RIA 生成的代码没有对我的接口的任何引用,所以我无法测试if (obj is IHasActiveField)- 如果我尝试IsActive在客户端从带有字段的基类继承,也会发生同样的情况,该类Data总是继承自Entity-我可能可以使用反射来查看该字段是否存在,或者只是测试每种类型(if (obj is Data)),但是如果可以使用更优雅的方式,那就更好了:)

0 投票
1 回答
258 浏览

c# - 如何在基于 WCF 的方案中管理 EF 4.2 关联

我正在开发一个企业应用程序,该应用程序将由一个丰富的 WPF 客户端组成,该客户端与一堆 Web 服务进行对话以检索数据。这些数据是使用 Code First EF 4.2 创建的 POCO。

我现在面临一个概念问题,我一直试图解决这个问题,但找不到一个好的解决方案。

1:n 关联

所以数据模型看起来像这样:

服务器端我有一个接口,负责将新创建的 dto(包括子集合中的新项目)从客户端附加到数据上下文并保存。这当然只有在客户端创建这些实体然后发送以添加时才有效。该服务添加新实体并返回更新的实体(主要是 Id 属性)。

但是,当我检索已经存在的实体时,我无法编辑任何关联(添加或删除实体 - 因为它们的大小是固定的)。所以现在我需要扩展接口以允许这样做:

对我来说,这似乎是一种笨拙的方法,而且界面变得越来越大,而且速度很快。这是与 POCO 合作的复杂方法吗?你怎么做呢?

通过手动映射的 n:m 关联

数据模型的不同部分如下所示:

每当我尝试在客户端创建 ClassA 和 ClassB 的实例并通过绑定将其相互添加时,当我尝试将其添加到上下文中的 Set 时出现错误。该错误表示不允许从 Mappings 属性中删除项目,我真的不明白这是从哪里来的。

第二部分在描述方面可能有点过于抽象,如果有人需要更多信息,我非常愿意添加它!

PS:请不要建议 Selftracking Entities,我知道它们,但我真的会对纯粹基于 EF 4.2 POCO 的解决方案感兴趣。

PPS:代码是手写到这个窗口中的,而不是实际使用的代码,所以可能会丢失一些东西,但这不是我问题的重点,所以我希望它就足够了。

0 投票
1 回答
188 浏览

c# - EF4 代码首先与外部实体的多对多关系

问题

我有两个课程:

  • OfficeProfile:存在于我的 EF 模型中
  • BusinessUnit:来自外部来源,例如 Web 服务

办公室资料和业务单位之间存在多对多关系,我想在链接表中表示OfficeProfilesBusinessUnits。我不想最终得到一个BusinessUnits包含业务单位列表的表,因为这些业务单位存储在我无法控制的外部域中。

有可能实现这一目标吗?

我试过的

我试过忽略BusinessUnit实体,但是忽略了链接表。

我尝试在映射多对多关系时忽略 BusinessUnit 实体,但这会引发InvalidOperationException说明

导航属性“BusinessUnits”不是“OfficeProfile”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的导航属性

.

0 投票
3 回答
709 浏览

ef4-code-only - 延迟加载不起作用

我在使用 EF Code first 4.1 时遇到问题,并且可能不理解某些内容。

我的理解是,通过将关系(无论是集合还是单个对象)标记为虚拟,它们将按需延迟加载,因此我可以执行以下操作:

但是,page.DepartmentId 已正确填充。此外,使用 context.Entry(page).Reference(p => p.Department).Load() 手动加载引用是可行的,但是拥有对象模型的全部意义在于不必在任何地方都如此痴迷。

上下文 OnModelCreating

当然,我没有禁用延迟加载。

0 投票
1 回答
1039 浏览

entity-framework - 首先使用 EF 4.2 代码拦截和记录更改

我花了一些时间阅读一些关于审计跟踪的帖子和文章,但仍然无法弄清楚这一点。

我需要的是一个非常基本的审计系统,它会给我以下结果:

  • 客户“John Doe”已被“用户”删除
  • 客户“Jane Doe”是由“其他用户”创建的
  • “John Doe”的地址被“用户”修改
  • 客户“Jane Doe”已被“其他用户”删除

我试图覆盖 dbContext 上的 SaveChanges 事件,但遇到以下问题:

我知道我可以在数据库上使用触发器来完成此操作,但我想将其保留在这里,以便我可以更好地控制它,因为我不是 SQL 人员,并且在部署应用程序后我将没有那么多控制权在分贝上。

我确定我在这里遗漏了一些非常简单的东西。我很感激任何帮助。

提前致谢。