问题标签 [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 投票
1 回答
686 浏览

asp.net-mvc-3 - MVC3 导航属性属性和客户端验证

我正在尝试进入 MVC3 的第一步,并且遇到了将模型中的导航属性转换为视图的问题。似乎在视图中导航属性不允许客户端验证,也没有选择“显示”标签属性。

我有以下简单模型:

其中引用了这个模型:

当我为此模型创建具有读/写操作和视图的控制器时,我得到以下创建表单:

除了实体类型下拉列表的标签之外,这很好,由于某种原因,它没有拾取模型中导航属性的“显示”属性(注意缺少空格)。尽管使用“必需”属性装饰了属性,但也没有为下拉列表启用客户端验证(服务器端验证没有问题)。客户端验证适用于其他字段。请注意,所有必需的 .js 脚本文件都已包含在内,并且我还在 web.config 中添加了相关的启用验证密钥。

有什么想法我在这里想念的吗?谢谢大家。

0 投票
1 回答
1192 浏览

c# - 使用实体框架 4.3.1 的导航属性 null

我正在使用Entity Framework 4.3.1并且我的导航属性遇到了一些问题。

在我的上下文中,我启用了延迟加载:

此外,我已将属性设为虚拟(实际上是我从模型中生成的):

这是在一个名为 Ride 的实体中。但是,当我访问它时myContext.Ride.Driver它是空的。这很奇怪,因为当我在运行时检查 Ride 实体时,我可以看到外键实际上填充了预期 Driver 的 ID。

我需要做些什么额外的事情吗?

当我生成一个新的 Ride 时,我设置了DriverID,但随后我从中获取 ID 的 Driver 不会自动添加为导航属性。


好的,我自己解决了这个问题,所以我将分享答案:我需要将驱动程序实体附加回上下文。myContext.Driver.Attach(驱动程序)。然后我可以这样做:Ride.Driver = Driver 而不是 Ride.DriverID = Driver.DriverID。

在代码中我这样做:

0 投票
1 回答
5895 浏览

asp.net-mvc-3 - 如何在实体框架中更新实体的导航属性

在带有实体框架的 ASP .NET MVC 3 中,我有一个域对象,它具有引用另一个对象的导航属性,如下所示:

当我创建 Person 的实例并尝试将其添加到数据库时,DBContext 会保留此实体“Person”的缓存并将其发送到数据库。因此,稍后在同一上下文实例的生命周期中,当我尝试访问此实体时,Company 字段始终为 null,因为导航属性从未更新。

有没有办法用数据库中存在的内容更新导航属性?

延迟加载已打开。

0 投票
2 回答
674 浏览

c# - 使用导航属性获取数据

我正在使用实体框架创建应用程序。我已经从数据库加载了数据库模型。这里在CourseDepartment中是Navigation Property,DepartmentID是外键。我创建了一个网格视图并将其数据源设置为课程表,但我想看到Deaptment Name而不是department ID.我可以使用导航属性,Department.count但如何使用导航属性从部门表中获取数据(部门名称)。任何可以帮助我的人这是我的代码

如果我不使用第一个函数,那么我无法访问部门名称属性,如果我使用 First() 它说

请告诉我如何解决?

0 投票
1 回答
1790 浏览

c# - EF 4.3.1 在 LinqToEntities 查询中包含继承的导航属性

我正在尝试使用代码优先方法和流畅的配置使用 EF 4.3.1 设置一个简单的继承场景。

我创建了一个具有一对一导航属性的抽象基类型“A”和一个继承类“AA”,也具有一对一导航属性,具有以下内容:

当我尝试使用第一级导航属性取回数据时,它按预期工作:

但是当我尝试包含继承类型的导航属性时,如下所示:

我在运行时收到 EntityCommandCompilationException 并带有以下内部异常消息:

指定表达式的 ResultType 与所需类型不兼容。表达式 ResultType 是“Transient.reference[...A]”,但所需的类型是“Transient.reference[...AA]”。参数名称:arguments[0]

有没有人遇到过类似的问题?

我可能遗漏了一些东西,但我看不出这个样本有什么问题。

我该怎么做才能让我的模型按预期工作?

0 投票
1 回答
458 浏览

c# - 如果导航属性不存在则插入导航属性,如果它确实存在则使用它而没有键

我有 2 张桌子:

我想对订单表进行插入(使用 EF),它将插入一个订单列表(所有订单都是同一个人,我只知道人名),如果人员表中不存在该人,我希望他将被插入其中,并且他确实存在,订单将填充正确的人。我不想先查询这个人是否在 person 表中,因为它是一个多余的调用。是否有可能仅在保存更改期间添加它并事先查询服务器?类似的东西:

0 投票
1 回答
455 浏览

foreign-key-relationship - 如何递归地包含导航属性

我有 2 个数据库,每个数据库都有一个相应的 EntityFramework DB 上下文,我正在使用 Entity Framework 5,代码优先。

我有类似于以下的表格:

然后,我有实体FooFooBarinDatabase1DbContextBarin Database2DbContext

Foo具有导航属性Parent(类型Foo)、Children(类型ICollection<Foo>)和Bar(类型Bar)。 FooBar具有导航属性Foo(类型Foo)和Bar(类型Bar)。

现在,我想要的是能够.Include(foo => foo.Bar),这样所有的和也Bar被加载了。ParentChildrenFoo

我希望我没有太混乱。

PS:我知道设置Bar导航属性会出现问题,因为它位于不同的数据库中。我在一些相关答案中看到了一些建议,这些建议暗示了观点或同义词。任何也考虑到我情况的这方面的答案将不胜感激。

0 投票
1 回答
4068 浏览

c# - 使用实体框架进行投影

我有一个关于使用实体框架进行预测的问题。

我有三张表:简介、传记和传记翻译

我想做以下预测:(传记 = IQueryable)

我的问题: OwnerId 投影正确,但翻译次数始终为 0。

投影不适用于集合属性吗?

我也试过 biographies.Inlcude("Translations"),但结果是一样的。

更新

我创建了一个小型测试项目,您可以在这里找到:

测试项目.zip

只有 3 个表(包括创建和插入语句)、一个 EDMX 文件和一个用于加载传记的类。我仍然无法使用它来投影集合导航属性,简单的导航属性可以正常工作。也许有人可以从测试项目中看到我做错了什么......

更新

我尝试了一种新方法,但仍然没有运气:

更新

如果我使用匿名类型,它会出人意料地工作......

0 投票
1 回答
1122 浏览

entity-framework-4 - 使用 Entity Framework 4.3 的过滤器加载导航属性

几天前,我提出了一个关于映射两个类MessageMessageStatusHistory使用 EF 的问题。映射进展顺利,但我StatusHistory在类中将导航属性MessageMessageStatusHistory对象相关联时遇到了一些问题。我只为一个用户加载消息,并且只想要与该用户有关的状态。就像我想显示用户是否将消息标记为已读/未读以及何时。如果我使用如下默认加载机制,它将加载与消息相关的所有历史记录,而与用户无关:

为了仅过滤一个用户的历史记录,我尝试了以下技巧:

我收到错误消息:

我也尝试过发表评论StatusHistory = m.StatusHistory.Where(x => x.UserId == userId).ToList(),但没有帮助。

请帮助我获取过滤后的 StatusHistory 的消息。

编辑:-上面是用这个代码解决的:

但是,如果我尝试包含对消息的回复:

q.ToList()使用for将查询转换为 List 时出现错误Histories = m.Histories.Where(x=> x.SenderId == userId).ToList()

0 投票
2 回答
869 浏览

entity-framework - 实体框架更新现有对象

我在我的数据库中添加了一行,并返回一个不同的上下文来更新它。我有这堂课:

C 可能是一个 EntityObject,但这个类不知道这一点。

我的保存看起来像这样:

等等...

在我的测试用例中,TryGetObjectStateEntry 找不到 stateEntry。然而,它是一个 EntityObject,并且它不是新的(IsNew 是我的标志),所以它会到达 else。这是我的问题: set.Attach 抛出此错误

“ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。”

下一刻,ApplyCurrentValues 抛出这个:

“在 ObjectStateManager 中找不到键与所提供对象的键匹配的对象。验证所提供对象的键值是否与必须应用更改的对象的键值匹配。”

这两者怎么可能是真的?

更多信息:

_item 是由 Get 在另一个上下文中创建的。然后处理了该上下文。那时,_item 有一个 EntityState.Unchanged。我对其进行了一些更改,并将其更改为 EntityState.Modified。(我没想到,因为上下文(及其 ObjectStateManager)应该已经消失了。)无论如何,一旦它到达 Save(上面),它的状态(由调试器报告)被修改,但我有到那时一个新的背景。如果此时我得到所有 ObjectStateEntries(已添加、已删除、已修改、未更改)的列表,则只有两个,并且 _item 不是其中之一,正如 ApplyCurrentValues 报告的那样,但它无法附加,因为“它是也在那儿!”。也许问题在于它仍然附加到旧的 ObjectStateManager (可能有一些不会让 ObjectStateManager 处理的引用?)。