问题标签 [navigation-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.

0 投票
2 回答
1346 浏览

entity-framework - 使用继承的集合导航属性(每个类型的表)

使用实体框架:代码首先,我正在尝试使用基类的导航属性来定义集合导航属性。

对象结构:

上下文 OnModelCreating:

生成数据库时,它会在 Images 表中创建一个 User_UserID 外键约束,而不是在 Content 表中使用 Author_UserID。

如何让它识别 Content..Author_UserID 字段作为ICollection<Image>导航属性的外键?

0 投票
1 回答
2091 浏览

asp.net-mvc - MVC 视图模型和导航属性

我有一个模型:

通用存储库:

通用存储库的接口:

我的特定于模型的存储库(继承了泛型):

我的控制器将视图模型加载到视图中:

最后是我的观点:

除了一个例外,一切都很好。该视图显示访问者列表 (VisitorLog)。使用导航属性,我可以通过简单地使用@item.Employees.EmployeeName来获取 EmployeeName 值而不是来自 VisitorLog 类的员工 ID 。但是,我还希望能够在控制器中的存储库调用中按员工姓名进行搜索:

但是上面示例中的Employees.EmployeeName没有显示为“v”列表成员中的选项。

任何帮助表示赞赏。

0 投票
1 回答
265 浏览

asp.net-mvc - ASP.NET MVC Entity Framework - 访问参数模型上的导航属性

我正在使用 ASP.NET WebAPI,在我的控制器中,我有一个名为 的方法PostAddToGroup,它采用参数int idGroup group. 在我的Group实体上,我有一个名为Members.

我想做的是这样的

代替

这可能吗,如果没有,是否有更好的方法来做到这一点?

0 投票
2 回答
2122 浏览

entity-framework - 使用标准显式加载子导航属性

在 EF5 中使用 DBContext - 在基于日期范围等条件进行过滤和部分加载之后。

我正在尝试生成一个完整的图形或对象树 -Persons->Events where the only Events that are included are within a date range. 所有这些同时保留通过以下内容获得的标准更改跟踪:

列表框和数据网格都绑定为适当的数据源。POCO 模板已修改为将 INotifyProperty 事件放在导航属性类 Events 中。

我已经为此奋斗了好几天,并且无论是延迟加载还是显式加载都无法过滤。在大量阅读博客/章节之后,我意识到与包含相关的相当不真实的限制;相反,我正在尝试显式加载。我正在使用 DBContext 书顺便说一句。

无法从数据库中只取回事件数据的子集是 100% 的交易破坏者,因为每个人可能有数十万个事件。对我或我的老板来说,Entity Framework 没有使这个功能相当明显是没有意义的——我们是否遗漏了什么?

我留下了注释代码来尝试说明我尝试过的一些路径。类本身就是该方法所属的存储库。我将进一步编辑这个问题,以澄清我尝试了多少条路线,因为它已经很多了。View 使用存储库层和 ViewModel,因此 XAML 背后的代码相当少。

提前寻求任何帮助,谢谢!

注意:我通过 PostSharp 使用日志记录/异常处理,而不是污染代码。

以下是我使用以前的路径生成的一些错误。

实体类型 DbQuery`1 不是当前上下文模型的一部分。

包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。

参数名称:路径

无法将“System.Data.Entity.Infrastructure.DbQuery 1[VB$AnonymousType_02 [Entity.Person,Entity.Notes]]”类型的对象转换为“System.Collections.ObjectModel.ObservableCollection`1[Entity.Person]”。

更新:我尝试过的另一条路线,仍然无法让它飞行:

另一个镜头: Public Overridable ReadOnly Property FilteredPersons(startdate As Date, enddate As Date) As ObservableCollection(Of Person) Implements IPersonRepository.AllFiltered Get context.Persons.Load() Dim DateCriteria = Function(e) e.events.Where(Function( d) d.eventDateTime > startdate 和 d.eventDateTime < enddate)

给出:

未找到类型“ObservableCollection(Of DailyNotes)”的公共成员“Where”。

非常接近,只有我在列表框中得到了很多重复的名字——但是导航通过并且日期标准有效。

不要尝试这个:)。它只选择子属性。

我希望将我的其他尝试添加到这个问题可能会提示其他答案并帮助其他人看到他们在第一次解决这个问题时可以进入的圈子!

0 投票
1 回答
711 浏览

entity-framework - 每个层次结构和继承关系的表

我正在使用面向 .Net 4.5 的 Entity Framework 5。对于我的一生,我无法弄清楚我做错了什么,导致在尝试使用 Table Per Hierarchy 和 Navigation 列时导致以下错误:

列名“Game_Category”无效。
列名“Game_Value”无效。
列名“Type_Category”无效。
列名“Type_Value”无效。

这是抽象基类(注意类别和值的复合 PK):

后面是两个不添加额外列的子类......

这是具有 Game 和 SetType 的导航属性的类...

从我的数据上下文...

查找表有一个名为 LookupType 的鉴别器列。我已经阅读了几个关于表/继承的教程。其他两个 - TPT 和 TPC 使用类似构建的对象是小菜一碟。虽然我理解上面的错误 - 它按照惯例正在寻找 FK 列,但我不明白我做错了什么或遗漏了什么导致它查找这些列。我尝试将 ForeignKey 属性放在 GameId 和 TypeId 属性上,但随后我收到有关依赖/主要关系约束的错误,并且我不确定如何将类别指定为附加外键。

我还没有找到一个关于表/继承的教程,在我使用它们时会遍历导航属性。任何帮助将不胜感激,这已经让我发疯了一个多小时。

更新:

我认为问题在于使用 Category 作为 key 的一部分。CardSet 没有用于该查找的“游戏”类别或用于该查找的“设置类型”类别的两个属性。我尝试创建这些属性,但没有奏效。是否可以使用 Fluent API 进行设置?到目前为止,我已经做了大约十几次尝试,但没有任何运气。

0 投票
3 回答
7770 浏览

entity-framework - 使用 Automapper,将 DTO 映射回实体框架,包括引用的实体

我有使用 Entity Framework 5 持久化的 POCO 域实体。它们是使用存储库模式从 DbContext 获得的,并通过 UoW 模式暴露给 RESTful MVC WebApi 应用程序。POCO 实体是代理并且是延迟加载的。

在将实体发送给客户之前,我将它们转换为 DTO。我正在使用 Automapper 来执行此操作,并且 Automapper 将代理 POCO 映射到 DTO 似乎可以正常工作,从而保持导航属性不变。我为此使用以下映射:

域/DTO 对象示例:

现在我正在尝试使用从线路发送回来的 DTO 更新我的上下文。我在让导航属性/相关实体正常工作方面遇到了具体问题。我正在使用的映射是:

上面,clientUow.Get() 引用 DbContext.Set.Find() 以便我从 EF 获取跟踪的代理 POCO 对象(它包含所有相关实体也作为代理)。

在我的控制器方法中,我正在执行以下操作:

客户端成功映射为代理 POCO 对象,但是它的相关实体/导航属性被替换为具有从 DTO 复制的属性值的新(非代理)POCO 实体。

上面, uow.Update() 基本上是指一个执行持久逻辑的函数,我有:

上述内容甚至不会持久存在实体,更不用说相关实体了。我已经尝试了映射的变体和使用分离/状态进行持久化的不同方法,但总是得到“ObjectStateManager 中已经存在具有相同键的对象”异常。

我已经查看了无数其他线程,但无法完全使用 Automapper。我可以从上下文中获取代理对象并手动通过从 DTO 更新它们的属性,但是我使用 Automapper 映射域 - > DTO,使用它来做相反的事情会更优雅,因为我的 DTO在很大程度上类似于我的域对象。

是否有教科书式的方法来处理带有 EF 的 Automapper,域对象/DTO 具有也需要同时更新的导航属性?

更新:

上述持久性逻辑更新上下文中的“根”EF 代理对象,但不会更新任何相关实体。我猜这是因为它们没有被映射到 EF 代理对象,而是被映射到普通域对象。帮助将不胜感激!

更新: 使用当前版本的 EF(5) 似乎我想要实现的目标实际上是不可能的,这是 EF 的核心限制,与 Automapper 无关:

关联

关联

我想它又回到了手动操作。希望这可以帮助其他想知道的人。

0 投票
1 回答
490 浏览

entity-framework - 给定外键,以编程方式在 EF 中使用导航属性

在我的项目中,我有EF with ADO.NET. 假设我有Entity Framework以下课程

然后我有navigation properties

  1. hasCategory:从 Category(Id) 到 Product(CategoryId),从 ​​1 到 Many
  2. hasType:从 Type(Id) 到 Product(TypeId),从 ​​1 到 Many

因此,如果我想访问产品的特定类别名称或类型名称(给定上下文):

现在,如果我有属性名称,我可以获得该属性:

鉴于propertyName我想知道是否有任何方法可以获取匹配的导航属性(hasCategoryhasType)以获取名称。Oterhwise 我不知道我应该在这两个类中Category寻找Type哪一个。

0 投票
1 回答
485 浏览

asp.net-mvc-4 - 带有复合键的 MVC4 导航属性

我使用 EF-database-first 创建了一个 MVC4 Web 应用程序。这些表具有复合键 [ID、Name、EffDate],并且没有在数据库中定义外键:例如,Department 部分类:

部门元数据类:

分配表,指的是部门表。它还有一个复合键 [DeptID, ProjectID, BillableUnitID, EffDate]。如果可以的话,我会将 DeptID 字段声明为外键......但我不控制数据库,更重要的是我相信 T-SQL 不会允许外键成为复合键的一部分:

这可行,但我得到一列 DeptID 编号。我想要的是一列部门名称。

上一个问题将我引导到虚拟导航属性,所以我添加了它们:

AllocationController 中 Index 的代码是: public ActionResult Index() { return View(db.Allocation.Include(a => a.Department).ToList()); }

当我单击分配索引视图的链接时,我收到此错误消息(在我停止调试之后):

“/”应用程序中的服务器错误。

指定的包含路径无效。EntityType 'KC_BillableUnit_TESTModel.Allocation' 未声明名为“Department”的导航属性。

堆栈跟踪 [InvalidOperationException:指定的包含路径无效。EntityType 'KC_BillableUnit_TESTModel.Allocation' 未声明名为 'Department' 的导航属性。]
System.Data.Objects.Internal.ObjectFullSpanRewriter.ConvertSpanPath(SpanPathInfo parentInfo, List`1 navPropNames, Int32 pos) +8355128
System.Data。 Objects.Internal.ObjectFullSpanRewriter..ctor(DbCommandTree 树,DbExpression toRewrite,Span span)+256 ....继续....

我尝试了各种注释组合,但都导致相同的错误。

如何让我的分配列表显示部门名称而不是 DeptID 编号?

0 投票
1 回答
655 浏览

.net - 实体框架模型优先导航属性约定

我正在使用带有 edmx 文件的模型优先实体框架,该文件已从现有数据库“逆向工程”。

在大多数情况下,实体和导航属性已根据我的约定自动检测到,但缺少一些导航属性 - 例如:

目前Works.EditorUserID是 的外键Users.UserID,但 Entity Framework 不会自动Editor在生成的对象上包含导航属性。

我可以在我的数据库上使用更好的命名约定来允许这种情况发生吗?

谢谢

更新: 我刚刚意识到实际上正在创建导航属性,但它的名称不是很有用 - 它正在创建一个名为User而不是Editor.

0 投票
2 回答
2731 浏览

.net - EntityFramework 集合属性是否需要设置器

使用 EntityFramwork(代码优先)建模 1-n 关系的常用方法是使用虚拟集合属性,例如:

由于Remarks收藏是最初null的,我采取以下方法

为了Remarks.Add在新创建Project的对象上使用该方法,而无需显式设置属性。

Afaik EF 内部派生自我的类并覆盖虚拟导航属性以支持延迟加载。

我的问题:我需要定义集合属性的设置器吗?英孚需要吗?我宁愿只公开 getter 并让类在内部管理集合。

编辑意外我只是在发布我的帖子后才注意到这个相关问题,所以也许它只是一个重复......