问题标签 [entity-framework-4.2]

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

entity-framework - Code First 和 Cascade 使用简单模型删除错误

我有一个简单的模型来跟踪储物柜出租情况,以此作为学习 EF Code First 和 DDD 原则的一种方式。该模型具有以下要求:

  • 可能有许多组织(即学校、学院等)。
  • 每个组织可以有许多储物柜和许多租用期。
  • 对于每个独特的储物柜和租期对,可能有多个出租(即每个储物柜可以在一个学期内租给几个不同的人)。

模型设置如下:

组织拥有两个收藏品;一个存放储物柜的集合,一个存放租用期的集合。为了保持 DDD 的传统,储物柜和租赁期不包含对其父组织的引用,但是它们都包含其父组织所需的外键。储物柜和租赁期都包含一系列租金。租赁有一个储物柜所需的外键和一个租期所需的外键。下图可以很好地了解我的模型的外观。

由于该组织是用级联删除建模的,因此当该组织被删除时,它会删除所有相关的储物柜和租赁期。但我相信使用级联删除对储物柜和租赁期进行建模也是有意义的,这样如果储物柜被删除,那么所有相关的租赁也会被删除。这同样适用于租赁期。当我像这样配置它时,EF 告诉我我不能这样做,因为它可能会创建循环或多个级联路径。但是,如果我采用任何一种关系(不管是哪一种关系)并关闭级联删除,那么它将创建数据库就好了。我想这可以解决多级联路径问题。

因为删除时的级联在此模型中不起作用,这似乎向我表明我的问题可能建模错误。我已经考虑了很长一段时间,但我无法想出任何方法来模拟这个可以与级联删除一起使用的问题。

我在下面包含了测试项目(Visual Studio 2010 解决方案)。唯一需要更改的是 App.config 中的连接字符串。我对所有建议持开放态度,因为我刚刚开始学习 EF Code First 和 DDD 原则。

http://i.stack.imgur.com/MBjKU.png

http://www.mediafire.com/?kj3rrg433bq8i5g

0 投票
1 回答
684 浏览

c# - EF 查询以获取所有子集合的联合

假设我有一个像这样的 Entity Framework 4.2 类:

我有这样的收藏:

建立整个集合中所有员工的列表的有效方法是什么?Companies我不需要担心重复。

注意:我正在尝试在没有实体框架上下文的情况下执行此操作——只使用Companies集合。但是,如果这会对性能造成巨大影响,我可以在必要时获取上下文。

0 投票
1 回答
786 浏览

c# - 实体框架以一对一(可选/必需)关系生成第二个左连接

我在 EF Code First 中有以下模型:

我将关系定义如下:

当我编写以下查询时:

产生的查询如下:

为什么实体框架对这种类型的关系有一个附加的(无用的)左连接?

0 投票
1 回答
728 浏览

c# - 在 ToList() 方法调用时调用数据库

从我的存储库中,我使用 ToList() 方法返回不同的列表。

问题是,当我对这个返回的结果(即 List 类型)运行更多 LINQ 时,它也会为此生成一个数据库调用。显然,这第二个 linq calll 是纯 LINQ to Entity,不应调用数据库。请参阅下面我在做什么。

有什么帮助或想法来阻止这个额外的数据库调用吗?

0 投票
0 回答
1338 浏览

entity-framework - 如何让一个实体从另一个基础实体继承并使用 TPC 和 EF 4.2 映射到 db?

假设我有一个 Activity 的实体模型聚合,如下所示:

忘记 Activity 和 Person 之间的关系,但请注意 Activity 和 ActivityTag 之间的 1..* 关系。流畅的映射看起来或多或少像这样:

鉴于此,我想为Activity实体引入一个新的集合属性:

DraftedTag实体应具有与ActivityTag. 唯一应该不同的是它映射到的表。我尝试创建一个从 ActivityTag 派生的类,如下所示:

DraftedTagOrm 已添加到 modelBuilder.Configurations 集合中,但甚至没有将外键关联添加到 Activity,我得到以下异常:

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

当我将 ActivityTag 类和 ActivityTagOrm 构造函数中的代码完全复制到各自的 DraftTag 类/配置构造函数中时,它会按预期工作——我得到两个具有相同架构但名称不同的不同表。但是,每次我想对 ActivityTag 类进行更改时,我都必须在 DraftTag 类中进行相应的更改。

是否可以通过让 DraftTag 扩展 ActivityTag 来使此代码干燥?如果是这样,DraftTag 的 EntityTypeConfiguration 会是什么样子?

0 投票
0 回答
122 浏览

sql-server-2008 - 是否需要将 2 个查询提交到数据库才能使用 EF / Linq to Entities 获取总计数和分页部分?

可能重复:
在实体框架 4.1 中查询数据页面并获取总数的更好方法?

在使用 EF / LINQ to 实体实现分页时,我熟悉使用Skip()Take()决定要显示哪个分页部分。我也熟悉Count()在调用之前使用Skip()Take()获取被分页的(非分页)结果的总数。

我的问题是,这是否总是必须最终以 2 个单独的查询被发送到数据库?我认为是的,因为我们需要先调用 Count() 来获取总数 ( SELECT COUNT(*) FROM...),然后使用 Skip/Take 扩展表达式树,然后再次调用以获取实际数据 ( SELECT * FROM...)。

我隐约记得读过 SQL 2k8 中的一个技巧,该技巧使总行计数变得更容易,但我怀疑 EF / LINQ to Entities 是否支持此提供程序功能。只是问这个问题,看看是否有人知道如何将这些整合到一个数据库中。

0 投票
1 回答
145 浏览

c# - 在 EF 4.2 中批处理存储过程命令

我调用了一个存储过程,它基本上是一个 INSERT 存储过程。它插入表 A,然后以表 A 的身份插入表 B。

现在,我需要从我的应用程序代码中调用这个存储过程 N 次。

有什么办法可以批量处理吗?目前它正在对数据库进行 N 次往返,我希望它是一次。

我能想到的唯一方法是通过用户定义的表类型通过网络传递整个项目列表。

但是这种方法的问题是我需要在存储过程中使用一个 CURSOR 来遍历每个项目以进行插入(因为标识字段)。

DbCommand.ExecuteNonQuery()基本上,我们可以使用 EF 4.2进行批处理吗?

或者我们可以用 Dapper 之类的东西来做到这一点吗?

0 投票
1 回答
10218 浏览

entity-framework - DbSet.Remove 和 DbContext.Entry(entity).State = EntityState.Deleted 之间的区别

考虑以下实体模型:

协议实体上没有直接的原因ICollection<Establishment>是因为 IsOwner 属性,它进一步定义了这种多对多关系。

关系映射如下:

这种关系是单向的,这意味着您只能从协议中访问参与者——您不能从机构访问协议。

现在,由于协议实体的主键是动名词参与者主键的一部分,并且由于指定了级联删除,我希望将协议置于已删除状态也会导致其参与者集合中的每个实体也被放入删除状态。

在协议 DbSet 上调用 Remove 时,这似乎有效:

但是,仅将协议条目的状态设置为已删除时,它似乎不起作用:

有没有办法可以定义关系,以便简单地将协议实体置于已删除状态也会导致相应的集合项实体置于已删除状态?

更新

我一直在阅读这方面的内容,并发现急切地加载 Participants 集合并没有帮助:

0 投票
3 回答
70 浏览

c# - 第三方应用程序要求旧程序集

有一个严重的问题:需要安装第三方web应用。部署到我的本地机器后得到异常:

无法加载文件或程序集 'System.Data.Entity, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。该系统找不到指定的文件。

问题是我没有资源,nuget packadge manager 也找不到与此版本类似的任何内容。安装实体框架版本。4.2.0 也不做任何事情。

有什么想法我应该下载什么以及在哪里下载?

最好的问候和感谢日志

0 投票
0 回答
578 浏览

sap-ase - Web Api 返回 Json - [System.NotSupportedException] 不支持指定的方法。(赛贝斯)

我将 Web api 与 Entity Framework 4.2 和 Sybase Ase 连接器一起使用。

在我尝试添加新表之前,这可以正常返回 JSON。

如果删除以下行,上述工作没有问题:

但是,当包含该行时,我收到错误:

""准备命令定义时发生错误。有关详细信息,请参阅内部异常。”

内部异常显示:“InnerException = {”不支持指定的方法。”}”“source = Sybase.AdoNet4.AseClient”

以下也会导致错误:

错误如下:

内部异常:"Specified method is not supported."

这表明 Sybase Ase 数据连接器存在故障。

我在所有表上使用数据注释来控制返回哪些字段。在颜色表上,我尝试了以下注释来限制仅返回键的属性:

任何想法可能导致此问题?

或者,如果我保留颜色并移除,

那么这也有效。似乎 Sybase Ase 连接器不支持 include 语句从一个对象在两个方向上分叉的情况。有办法解决这个问题吗?Sybase Ase 和进度数据连接器也会出现同样的问题。

该问题不会出现在标准 ASP.net MVC 控制器类中 - 问题在于将单个表上的两个一对多关系序列化为 JSON。

如果打开延迟加载,此问题仍然存在。

在我看来,这是 Sybase ASE 的一个错误,没有一个连接器能够解决。