问题标签 [navigational-properties]
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.
sql-server-2008 - Entity Framework 4 - 使用 IQueryable 加入 SQL 视图存储库
如果我有以下IQueryable<T>
存储库:
我像这样使用它来获得特定的订单:
一切皆好。
现在,我有一个名为OrderDetailsView的 SQL Server 2008 视图,我已将其添加到我的 EDMX 中。它有一个我想加入的名为OrderId的字段。这是Order和OrderDetailsView之间的1-1。
我想返回一个特定的订单,以及相应的 OrderDetailsView 记录。
我不确定这里的正确方法是什么。
我可以在我的 Order 实体上拥有 View 的导航属性吗?我可以添加关联——但设计师抱怨它没有被映射——我假设它需要一个 FK,但显然视图不能有 FK。
我需要做一个明确的加入吗?如果是这样,这意味着它们是没有关联的独立实体,所以我需要另一个存储库 - 而且我需要两个数据库调用,因为您不能跨两个存储库执行 JOIN。
理想情况下,我想这样做:
但如前所述,我不知道是否可以添加指向视图的导航属性。
有任何想法吗?
c# - 基于抽象实体 (EF CTP5) 的急切加载嵌套导航问题
我的 EF 模型的一部分看起来像这样:
概括:
- 位置有很多帖子
- Post 是一个抽象类
- 讨论来源于帖子_
- 讨论有很多评论
现在,我试图实现的查询:
获取有关位置 ID 1234 的信息,包括与这些讨论相关的任何讨论和评论。
我可以得到这样的讨论和评论:
但我似乎无法根据Location实体上的Posts导航来获取它。
我试过这个:
哪个编译,但我得到错误:
System.ArgumentException:包含路径表达式必须引用实体定义的属性,还可以选择使用嵌套属性或对 Select 的调用。参数名称:路径
有任何想法吗?我可能会从帖子中“倒退”:
但就我的存储库而言,这既麻烦又语义错误(我不应该通过发布存储库来获取有关位置的信息)。
有任何想法吗?
编辑
所以在仔细考虑之后,我意识到这OfType<T>
是一个过滤操作。正如我们所知,EF 不支持预加载过滤。唯一的选择是检索所有内容,或使用匿名类型投影。
我无法检索所有内容,因为涉及的元数据太多。所以我正在尝试匿名类型投影。
.net-4.0 - 具有导航属性的 EF4 复杂类型(是否可能)或替代方案?
我使用带有 POCO 的 Linq-to-Entities 使用 DB first 方法做 EF4 Model 碰壁了...
我有两个表:Customer
它们NamePrefix
通过NamePrefixId
. 列是:
在这种情况下,Customer
实体具有导航属性NamePrefix
。我创建了一个复杂类型NameOfPerson
,以便我可以在其他实体中使用它。复杂类型由NamePrefixId
, LastName
, FirstName
,组成MiddleInitial
。但现在我在导航属性上收到以下错误消息NamePrefix
:
有没有办法做到这一点?
c# - 实体模型 - 如何插入/更新涉及导航属性的数据
我正在使用实体框架、WebForms、.Net Framework 3.5 我想使用实体模型更新数据库中的记录,这也涉及更新外键,这已成为实体中的导航属性。
我怎样才能做到这一点?我见过一种涉及另一个查询的方法,例如
我怎么能不去 DB 做到这一点?
entity-framework - 使用交叉引用表创建实体模型 - EntityFramework 4.1
这是我的场景(表格):
当我将这 3 个表导入 EDMX 模型时,我得到 2 个实体:Employee 和 Department。实体 Employee 具有导航属性 Departments,实体 Department 具有导航属性 Employees。
这一切都很好。我其实很喜欢这种方式。
但是,当我想在 XREF 表中添加更多字段时,问题就开始了,例如,我希望有 DateCreated、UserId 字段来记录何时进行更改以及由谁进行更改。如果我在 XREF 表中添加这两个字段,那么我的 EDMX 模型将显示 3 个实体而不是两个。这不是什么大问题,但是由于我已经完成了编码,所以我正在寻找简单的解决方案(以避免编码)。
问题:是否可以在 XREF(交叉引用)表中添加新字段并仅保留两个实体?如果是,我将如何更新我的日期时间和用户 ID 信息?
我假设必须存在 XREF 实体才能更新它(使用日期和用户 ID),但我真的很喜欢具有导航属性:Departments和Employees,而不是具有导航属性EmployeesDepartmentXREFs。
这有中间立场吗?最佳做法是什么?
谢谢。
linq - 编写 LINQ 查询。加入 VS 导航属性
我正在尝试更多地了解 Linq 查询和实体框架(4.1)。请查看以下两个查询。两个查询都返回汽车类型名称 (CarType.Name)
在第一个查询中,我使用了 join 并忽略了导航属性 CarType
其次,我使用了导航属性 CarType
我在 LinqPad 中运行了两个,因此有 Guid.Parse 函数。
当我运行这些时,第一个语句运行得更快。LinqPad 报告 00:00:036。第二条语句运行速度较慢,LinqPad 报告 00:00:103
从结果来看,使用连接而不是导航属性的 Linq 查询似乎更快。真的是这样吗?请有人对此有所了解。在编写 Linq 查询时,是否有任何一般性指导和最佳实践?
谢谢
entity-framework - IValidatableObject 的 Validate 方法期间的延迟加载问题
我正在使用 EF4.3、POCO、延迟加载和 IValidatableObject 接口。
我有一个与合同实体有 1-1 关系的贷款实体。合同包含一堆数据,除非需要,否则最好不要加载。
我的问题是......当我对我的贷款实体进行更改时,它的 Validate 方法旨在加载相关的合同实体,以确保其数据根据贷款的状态(或状态)有效......但合同导航属性仍然为空?如果我在调用 SaveChanges 之前立即快速查看贷款,则会加载合同数据并且 SaveChanges 会正常进行,否则会失败。
如果有人能够解释为什么我会看到这种行为,我将不胜感激。
干杯
克雷格
entity-framework - EntityFramework 4.3.1 代码优先导航属性映射和可见性
这是一个简短问题的长篇介绍,对不起!
我正在使用 EF 4.3.1 Code First,我有以下模型
还有我的 DBContext 类,在其他一些类库中定义,具有多对多映射:
所以,这行得通。但是,如果注意到该方法Action.AuthorizeRole(Role role)
很容易假设角色授权逻辑可能很复杂(现在一些已经授权的验证,但可能是任何验证,对吧?),这在一个好的老式域上是完全有效的模型。但是...根据创建 POCO 代理的要求,角色集合public virtual ICollection<Role> Roles {get; set;}
需要公开,至少是吸气剂。这意味着 Action 类的任何客户端都可以添加或删除角色,绕过任何验证逻辑。是的,我想要延迟加载、更改跟踪等工作,所以我确实需要创建代理。
问候,我开始测试一些方法,使我能够将此属性设为public virtual ICollection<Role> Roles {get; set;}
非公共属性,以便稍后测试代理创建。由于代理生成了我自己的类的子类,并且由于我信任我的继承者而不是我的客户,所以我决定将属性设为protected
这样protected virtual ICollection<Role> Roles {get; set;}
。但是,当然,我得到了一个编译错误就行了
因为现在该属性受到保护,不能在 Action 类或其继承者之外访问,当然myDB
context 类不是其中之一。
所以我需要尝试在myDB
不公开它(属性)的情况下从类中访问属性。我虽然反思。我的上下文类看起来像这样:
注意新方法ExtractPropertyValue
,在多对多映射指令上调用它。这灵魂工作对吗?HasMany 方法需要一个函数,该函数接收一个 Action 并返回一个 ICollection 的某物(在这种情况下为 Role),这就是得到的。但是不,它不起作用,它当然可以编译,但是在运行时,我得到了类似“这个表达式必须是像 obj => obj.MyProperty 这样的有效属性”的异常。
好吧,它需要是一个“直接”属性,并且它需要可以访问 de DBContext 类。我决定将我的属性设置为受保护的内部并将我的 DBContext 类移动到我的域类库(其中定义了所有实体),我真的不太喜欢它,但我更喜欢让我的属性被所有人访问. 我的财产看起来像这样:
我的 DBContext 类是这样的,就像我第一次拥有它一样,只是它现在定义在与所有实体相同的类库中:
这很好用。因此,现在唯一需要检查的是代理的创建,即延迟加载和更改跟踪。作为受内部保护而不是公共保护的财产,我担心它可能不起作用,但是是的,它确实起作用了,而且一切顺利,真的。
现在,我的问题/请求来了。如果导航属性实际上不需要公开才能创建代理,则受保护就足够了(我将内部排除在外,因为我认为这只会影响使用该属性进行关系映射的能力),为什么要限制在表达式上提取 HasMany 方法的属性,或者更好,因为我知道属性必须是被映射类型的属性而不是随机集合,为什么没有 HasMany 的重载,它采用字符串 propertyName 和搜索财产本身,即使它不是公共财产。这将允许具有非公共导航属性,在我看来,这将一直允许一个整洁设计的对象域。
也许我在这里遗漏了一些东西。
非常感谢。
.net - 如何在不丢失导航属性的情况下回滚实体删除
我们首先使用实体框架代码,当我们不想回滚插入、更新和删除的实体更改时,我遇到了问题SaveChanges()
。
具体来说,我有一个用作 TableEditor 的 datagridview 来更改一些辅助表。datagridview 绑定到DbSet<TEntity>
.
我的更新回滚似乎工作正常,我只是将 currentValues 设置回它们的 OriginalValues,并将状态更改为unchanged
.
当一条记录插入到gridview(但没有保存更改)时,它永远不会出现在实体类中,我再也看不到它了......所以我猜它不会进入dbSet,并且没有回滚需要这个吗?
但我的主要问题在于 Delete:
据我了解,当一条记录被“删除”(例如tableData.Remove(currentItem);
)时,它只是被标记为删除,直到调用 SaveChanges 为止。因此,如果我将 State 从deleted
back 更改为unchanged
,那应该可以处理回滚,对吗?
好吧,记录确实再次显示,但记录的导航属性消失了!(即包含外键和与其他实体的必需关系的列)。为什么是这样??!
这是我到目前为止所拥有的:
示例用法:
任何想法为什么导航属性会从记录中消失?(或者我能做些什么让他们回来?)
编辑: @Chris 关于使用
Refresh
:
我正在使用DbContext,所以我用这一行替换了我的回滚方法:
但是,这似乎并没有重新加载上下文,因为记录仍然丢失......我用Refresh
错了吗?
这听起来像是我的问题的可能解决方案,但我仍然想知道为什么会删除导航属性?
c# - 实体框架导航属性记录从一个记录移动到另一个“等待操作超时”
我的 Entity 框架存储库中的这个简单函数让我很头疼。我已经做了一百万次类似的事情,但是这个只是一直给我一个WIN32Exception 等待操作超时
个人 (1 - *) 礼物
不知何故,我希望我不能将礼物从 Individu 迁移到另一个,因为我正在循环遍历我正在更改的同一组。
我检查了 sys.dm_tran_locks 并且这没有显示 sql 中任一表上的任何正在运行的锁。
关于如何规避这个问题的任何想法?(增加锁定超时时间没有帮助,我在使用其他导航属性时遇到同样的错误(礼物只是其中之一)
更新: 为了让你们了解我在这里处理的数据量:
有 +- 500.000 INdividus,总共有 +- 1000 万份礼物。每个人有 0 到 100 份礼物
您是否认为这个原因足以将此代码从 EF 中移出并在更新查询中运行迁移?(从上面的数据你可以看到我在一个事务中只更新了 100 行,这已经给了我超时)