问题标签 [entity-framework-4.1]

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 回答
2135 浏览

entity-framework-4 - 当主键名称不同时,如何使用 TPT 继承模型?

对遗留数据库使用 Entity Framework 4.1,我无法生成一组 TPT 继承模型,这些模型不是复数形式,并且对公共主键使用不同的名称。

我正在使用数据库表组织、帐户和公司,如下所示:

Account.AccountID 和 Company.CompanyID 有一个 FK 约束,即这些列中的值也必须包含在 Organization.OrganizationID 中,因此如果没有组织行,两者都不能存在。如果我从头开始设计这些表,Account 和 Company 都将使用 OrganizationID 作为它们的主键。

当我尝试使用下面列出的简单选择代码时,我收到错误:

属性“OrganizationID”不是“公司”类型的声明属性。使用 Ignore 方法或 NotMappedAttribute 数据注释验证该属性是否已从模型中显式排除。确保它是有效的原始属性。

0 投票
1 回答
8783 浏览

wpf - WPF 中是否提供 RecreateDatabaseIfModelChanges?

我正在尝试实体框架代码。我似乎找不到要RecreateDatabaseIfModelChanges在 WPF 4.0 中使用的程序集/命名空间。这是仅限 ASP.NET 的功能吗?如果不是,我应该参考什么程序集?

这是我的代码:

0 投票
3 回答
2117 浏览

c# - 使用 Code First EF4.1 保存时如何向属性添加默认值?

我首先创建了一些这样的模型:

我在应用程序启动时使用这一行:

使用上面提到的所有属性作为列创建了一个名为 Projects 的表......这正是我想要的。

但是,现在当我在 DbContext 上发出 SaveChanges() 时,我需要填充一些默认值。当我保存时,我需要使用适当的值更新 ModifiedOn 和 ModifiedBy 属性。

通常,我至少会在数据库端(触发器或存储过程)执行 DateTime 值,但这显然不是这里的选项,因为数据库将在类更改时被删除。而且由于我首先编写代码,因此我没有可以调整属性的模型设计器。

我想做的是在 EditableBase 类中添加一个方法,该方法在执行 SaveChanges() 时被调用,从而将所有涉及的逻辑保存在一个地方。是否有可能做到这一点?实现我的目标的最佳方式是什么?

0 投票
1 回答
10344 浏览

c# - 如何在 EF 4.1 RC 中关闭 DbContext 级别的更改跟踪?

我遇到了一个似乎很常见的问题:我正在更新我的数据库中的值,但 EF 使用的是对象的原始内存副本,并且这些更改的值不会反映在显示的数据中。我明白为什么会这样,但我想不出解决办法。

最常见的解决方案似乎是设置MergeOptions.NoTracking为完全关闭更改跟踪(或AsNoTracking()在查询时使用扩展方法)并在每次访问对象时强制刷新,这对我的目的来说很好。

我有一个通用的基础存储库,我的其他存储库继承自:

DbContext这样:

如果我All()因此更改存储库的方法:

我得到了想要的结果——当显示产品的页面被刷新时,数据库中的更新就会反映出来。但是,我不能在Get()方法中执行此操作,因为该扩展方法仅适用于IQueryable.

理想情况下,我想在DbContext级别上关闭它,因为我永远不需要更改跟踪,但似乎没有明显的方法可以做到这一点,而且关于该主题的文档几乎为零(除非有人可以指出我给一些?拜托!)。

我尝试在DbContext禁用这些配置选项的情况下添加一个构造函数:

但我必须承认,我只是在猜测它们的真正作用(我只是通过查看源代码才发现它们),而且它们似乎没有任何作用。

任何帮助将不胜感激。如果更多信息/代码有帮助,请告诉我。

0 投票
1 回答
12822 浏览

c# - EFCode First Property Null 问题

我在 asp.net mvc 3 模型中使用 EFCode First。(Entity Framework 4.0 和 EFCode First 0.8)模型定义如下:

使用时db.Users.Find(1),会抛出这个错误:

'User' 上的 'WorkedYears' 属性无法设置为 'null' 值。您必须将此属性设置为“Int32”类型的非空值。

注意:数据库中存在user.Id=1,记录的WorkedYears为NULL。如果我在数据库中设置了 WorkedYears = 0,错误就会消失,而且如果我定义如下属性:public int? WorkedYears{get; set;},错误也会消失。但我不想使用 int?,并且如果未设置,也希望该列保持 NULL。那么有没有其他解决方案来解决它?

非常感谢。

0 投票
3 回答
15127 浏览

c# - Entity Framework Code First - 为什么我不能以这种方式更新复杂的属性?

我正在使用 Entity Framework 4.1(代码优先)开发一个小型示例项目。我的课程如下所示:

我已经将几个 EmployeeTypes(“first”、“second”)保存到数据库中,并且我已经保存了一个拥有第一个类型的 Person。现在我想修改Person。我知道我可以通过加载 Person、更改属性然后保存来做到这一点。但是我想做的,在我看来它应该起作用的,是这样的:

奇怪的是,这会更改 FirstName 和 LastName,但不会更改 EmployeeType。如果我得到一个新的 Context 并请求这个 Person,EmployeeType 仍然设置为“first”,就像这段代码运行之前一样。

我需要做什么来更新导航属性,而不仅仅是标量属性? (这尤其令人费解,因为对于 EmployeeType,唯一真正需要更改的是 Person 表中的外键,而该键是一个标量属性。)

(顺便说一下,我知道我可以通过先检索 Person 来做到这一点,然后一个接一个地更改属性,但是当我在 ASP.NET MVC 中使用模型绑定时,似乎这种方式会更容易,因为我' 将在我的 POST 方法中已有更新的人员对象。)

0 投票
1 回答
3086 浏览

c# - Entity Framework 4.1 RC (Code First) - 实体不更新关联

我想做的很简单。我有两节课:

当我想更新 TownRecord 类的 RecordType 属性时,我发现关联更新失败。不抛出异常但不执行更新:

注意:为了清楚起见,我删除了我的错误处理......

我在这里看到了与此类似的问题,但我不明白。这可能是一个非常愚蠢的新手错误,但我已经 StackOverflowing 和谷歌搜索了几个小时,却一无所获。任何帮助是极大的赞赏。

0 投票
1 回答
1630 浏览

c# - 实体框架的双重自引用属性

这段代码小规模地代表了我的问题:

当我在实体框架(4.1)场景中使用这个类时,系统只生成一个关系,认为 Parent 和 Friends 是同一个关系的两个面。

我如何告诉在语义上分离属性,并在 SQL Server 中生成两个不同的关系(因为我们可以看到 Friends 与 Parent 完全不同:-))。

我尝试使用流畅的界面,但我认为我不知道正确的调用。

谢谢大家。

安德里亚·比奥利

0 投票
1 回答
974 浏览

entity-framework - 如何在 ASP.net EFCodeFirst 中使用判别式设置外键约束?

我有以下用于创建 EFCodeFirst 数据库的 C# 代码:

这在 fluent API 中创建数据库:

我的想法是让用户和组能够形成组。所以 GroupB 可能是 GroupA 加上另外 1 个人。我的问题是,当判别器说要这样做时,我如何强制框架检查 Member_ID 是否是 User 的键,以及使用 Group。

顺便说一句,用户和组实体具有 int ID {get; 放; } 在他们的父类中声明。

谢谢!

编辑:

重新审视这一点,我现在在将成员添加到组时遇到问题。这是我的代码:

同样,Group 和 User 父类定义 int ID {get;set;}

这是我的控制器中将用户添加到组的代码:

我知道这甚至不是最好的方法,但它说明了我的问题。顺便说一句,Repository<> 类共享 DBContext。所以本质上,.Save on one 就是 .Save on them all。这工作正常。

此代码采用分号分隔的组 ID 字符串,并将用户添加到其中。但是,我得到了这个例外:

我不明白为什么要将 Group_ID 更改为 NULL。我将 Group_ID 声明为 int?,所以我认为它应该可以为空。这里发生了什么事?

0 投票
4 回答
9459 浏览

entity-framework - EF 4.1 SaveChanges 不更新导航或参考属性

我首先使用代码,可以毫无问题地添加记录。数据库已正确创建并且已播种没有任何问题。但是在我的 Edit 操作中调用 SaveChanges() 只会更新实体,而不是任何导航或引用属性。

我的模型的简化版本:

我不会包含代码,但我确实有一些自定义模型绑定正在进行。我的编辑操作(使用 MVC 3)没有填充 ContactType 或 USState 属性。绑定正确地返回了一个完全填充的 Contact 对象,该对象具有来自表单的正确值。

如果我正确理解 EF 4.1,则在保存我的联系人对象时,我只需执行以下操作即可将更改持久保存到数据库:

但是,当我这样做时,只会更新原始属性。在上面的例子中我遗漏了一些东西:我正在使用一个事务,一个 try catch 块,并检查它是否是一个新记录。

我使用了 SQL Profiler,并且可以确认 ContactType 和 Territory 表的更新查询没有发送到数据库服务器。

我的导航和参考属性的状态属性已修改,但我也尝试手动设置:

我可能弄错了,但我很确定我的代码在 CTP5 下工作。

有任何想法吗?在这一点上,我不确定我应该如何进行调试。

谢谢,史蒂夫