问题标签 [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.
code-first - 从 IQueryable 访问 DbContext
我正在尝试实现可能需要利用 Redis 的缓存模式。这种模式的问题是我需要禁用 Configuration.ProxyCreationEnabled 然后重新启用它以避免跨网络场的任何问题。
我想做的是从 IQueryable 访问 DbContext ,这样我就可以一次而不是到处执行此操作。最简单的方法是将正在使用的 DbContext 传递到我的缓存扩展中,但是我遇到了这篇文章:
有没有一种方法可以使用 EF 4.1 Code Fist(DbSet 等)以与上述链接类似的方式访问 DbContext?
我试图自己找到这个,但很难使用反射从 IQueryable 中引用的 DbSet 中找到基类。
entity-framework-4 - DbContext SaveChanges 语句执行顺序
我有一个表,该表在具有序数列的表上具有唯一索引。因此,例如该表将具有以下列:
表 ID、ID1、ID2、序数
唯一索引跨 ID1、ID2、Ordinal 列。
我遇到的问题是,当从数据库中删除记录时,我会重新排序序数,以便它们再次连续。我的删除功能将如下所示:
问题是,当我调用 Context.SaveChanges() 时,它会破坏唯一索引,因为它似乎以与传递语句不同的顺序执行语句。例如,会发生以下情况:
- 重新排序序数
- 删除记录
代替:
- 删除记录
- 重新排序序数
这是 EF 的正确行为吗?如果是,有没有办法覆盖这种行为来强制执行顺序?
如果我没有正确解释这一点,请告诉我......
entity-framework-4.1 - 如何将实体添加到多个表?
我的数据库中有 2 个表:Students
和StudentsHistory
. 这个想法是表中的每一次更改都Students
必须在表中创建一个新记录StudentsHistory
(例如,当我编辑一个学生时,必须执行 2 个操作:对学生进行更新和对学生历史进行插入)。
如何在不创建 2 个类并映射它们的情况下使用 Entity Framework 4.1 Code-First 执行此操作?我只想Student
上课,并以某种方式告诉 EF 将 Student 对象保存到 2 个表中。
任何人都可以帮忙吗?
PS它应该在代码中完成,而不是使用SQL触发器或其他东西。
c# - 实体框架 4.1 代码优先和自动映射器问题
考虑这个简单的模型和视图模型场景:
出现的问题是:
我有一个不需要公司的编辑页面,所以我不从数据库中获取它。现在,当提交表单时,我会:
然后我做一个
问题是即使我将 oldCompany 分配给我的公司,在 savechanges 之后它在数据库中仍然为空。
笔记:
如果我更改这些行:
对这些:
请注意,我更改了 2 次状态,它工作正常。可能是什么问题?这是 ef 4.1 的错误吗?
这是解决该问题的示例控制台应用程序:
entity-framework - 是否有停止 EF 4.2 向自动生成的表名和列名添加空格的“数据库级”方法?
我在纯代码“模式”中使用 Entity Framework 4.2。我让它从模型中自动生成我的数据库。
但是,它会根据标题大小写在我的表和列名中添加空格——例如,一个CustomerOrder
类被映射到一个[Customer Orders]
表,一个ProductNumber
属性被映射到一个[Product Number]
字段。
有什么方法可以防止这种情况发生 - 没有通过 Fluent API 配置每个表和属性名称(我知道该怎么做)?
这是4.2的新东西吗?
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)
),但是如果可以使用更优雅的方式,那就更好了:)
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:代码是手写到这个窗口中的,而不是实际使用的代码,所以可能会丢失一些东西,但这不是我问题的重点,所以我希望它就足够了。
c# - EF4 代码首先与外部实体的多对多关系
问题
我有两个课程:
- OfficeProfile:存在于我的 EF 模型中
- BusinessUnit:来自外部来源,例如 Web 服务
办公室资料和业务单位之间存在多对多关系,我想在链接表中表示OfficeProfilesBusinessUnits
。我不想最终得到一个BusinessUnits
包含业务单位列表的表,因为这些业务单位存储在我无法控制的外部域中。
有可能实现这一目标吗?
我试过的
我试过忽略BusinessUnit
实体,但是忽略了链接表。
我尝试在映射多对多关系时忽略 BusinessUnit 实体,但这会引发InvalidOperationException
说明
导航属性“BusinessUnits”不是“OfficeProfile”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的导航属性
.
ef4-code-only - 延迟加载不起作用
我在使用 EF Code first 4.1 时遇到问题,并且可能不理解某些内容。
我的理解是,通过将关系(无论是集合还是单个对象)标记为虚拟,它们将按需延迟加载,因此我可以执行以下操作:
但是,page.DepartmentId 已正确填充。此外,使用 context.Entry(page).Reference(p => p.Department).Load() 手动加载引用是可行的,但是拥有对象模型的全部意义在于不必在任何地方都如此痴迷。
上下文 OnModelCreating
当然,我没有禁用延迟加载。
entity-framework - 首先使用 EF 4.2 代码拦截和记录更改
我花了一些时间阅读一些关于审计跟踪的帖子和文章,但仍然无法弄清楚这一点。
我需要的是一个非常基本的审计系统,它会给我以下结果:
- 客户“John Doe”已被“用户”删除
- 客户“Jane Doe”是由“其他用户”创建的
- “John Doe”的地址被“用户”修改
- 客户“Jane Doe”已被“其他用户”删除
我试图覆盖 dbContext 上的 SaveChanges 事件,但遇到以下问题:
我知道我可以在数据库上使用触发器来完成此操作,但我想将其保留在这里,以便我可以更好地控制它,因为我不是 SQL 人员,并且在部署应用程序后我将没有那么多控制权在分贝上。
我确定我在这里遗漏了一些非常简单的东西。我很感激任何帮助。
提前致谢。