问题标签 [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.
asp.net-mvc-3 - MVC3 导航属性属性和客户端验证
我正在尝试进入 MVC3 的第一步,并且遇到了将模型中的导航属性转换为视图的问题。似乎在视图中导航属性不允许客户端验证,也没有选择“显示”标签属性。
我有以下简单模型:
其中引用了这个模型:
当我为此模型创建具有读/写操作和视图的控制器时,我得到以下创建表单:
除了实体类型下拉列表的标签之外,这很好,由于某种原因,它没有拾取模型中导航属性的“显示”属性(注意缺少空格)。尽管使用“必需”属性装饰了属性,但也没有为下拉列表启用客户端验证(服务器端验证没有问题)。客户端验证适用于其他字段。请注意,所有必需的 .js 脚本文件都已包含在内,并且我还在 web.config 中添加了相关的启用验证密钥。
有什么想法我在这里想念的吗?谢谢大家。
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。
在代码中我这样做:
asp.net-mvc-3 - 如何在实体框架中更新实体的导航属性
在带有实体框架的 ASP .NET MVC 3 中,我有一个域对象,它具有引用另一个对象的导航属性,如下所示:
当我创建 Person 的实例并尝试将其添加到数据库时,DBContext 会保留此实体“Person”的缓存并将其发送到数据库。因此,稍后在同一上下文实例的生命周期中,当我尝试访问此实体时,Company 字段始终为 null,因为导航属性从未更新。
有没有办法用数据库中存在的内容更新导航属性?
延迟加载已打开。
c# - 使用导航属性获取数据
我正在使用实体框架创建应用程序。我已经从数据库加载了数据库模型。这里在Course
表Department
中是Navigation Property
,DepartmentID
是外键。我创建了一个网格视图并将其数据源设置为课程表,但我想看到Deaptment Name
而不是department ID
.我可以使用导航属性,Department.count
但如何使用导航属性从部门表中获取数据(部门名称)。任何可以帮助我的人这是我的代码
如果我不使用第一个函数,那么我无法访问部门名称属性,如果我使用 First() 它说
请告诉我如何解决?
c# - EF 4.3.1 在 LinqToEntities 查询中包含继承的导航属性
我正在尝试使用代码优先方法和流畅的配置使用 EF 4.3.1 设置一个简单的继承场景。
我创建了一个具有一对一导航属性的抽象基类型“A”和一个继承类“AA”,也具有一对一导航属性,具有以下内容:
当我尝试使用第一级导航属性取回数据时,它按预期工作:
但是当我尝试包含继承类型的导航属性时,如下所示:
我在运行时收到 EntityCommandCompilationException 并带有以下内部异常消息:
指定表达式的 ResultType 与所需类型不兼容。表达式 ResultType 是“Transient.reference[...A]”,但所需的类型是“Transient.reference[...AA]”。参数名称:arguments[0]
有没有人遇到过类似的问题?
我可能遗漏了一些东西,但我看不出这个样本有什么问题。
我该怎么做才能让我的模型按预期工作?
c# - 如果导航属性不存在则插入导航属性,如果它确实存在则使用它而没有键
我有 2 张桌子:
我想对订单表进行插入(使用 EF),它将插入一个订单列表(所有订单都是同一个人,我只知道人名),如果人员表中不存在该人,我希望他将被插入其中,并且他确实存在,订单将填充正确的人。我不想先查询这个人是否在 person 表中,因为它是一个多余的调用。是否有可能仅在保存更改期间添加它并事先查询服务器?类似的东西:
foreign-key-relationship - 如何递归地包含导航属性
我有 2 个数据库,每个数据库都有一个相应的 EntityFramework DB 上下文,我正在使用 Entity Framework 5,代码优先。
我有类似于以下的表格:
然后,我有实体Foo
,FooBar
inDatabase1DbContext
和Bar
in Database2DbContext
。
Foo
具有导航属性Parent
(类型Foo
)、Children
(类型ICollection<Foo>
)和Bar
(类型Bar
)。
FooBar
具有导航属性Foo
(类型Foo
)和Bar
(类型Bar
)。
现在,我想要的是能够.Include(foo => foo.Bar)
,这样所有的和也Bar
被加载了。Parent
Children
Foo
我希望我没有太混乱。
PS:我知道设置Bar
导航属性会出现问题,因为它位于不同的数据库中。我在一些相关答案中看到了一些建议,这些建议暗示了观点或同义词。任何也考虑到我情况的这方面的答案将不胜感激。
c# - 使用实体框架进行投影
我有一个关于使用实体框架进行预测的问题。
我有三张表:简介、传记和传记翻译
我想做以下预测:(传记 = IQueryable)
我的问题: OwnerId 投影正确,但翻译次数始终为 0。
投影不适用于集合属性吗?
我也试过 biographies.Inlcude("Translations"),但结果是一样的。
更新
我创建了一个小型测试项目,您可以在这里找到:
只有 3 个表(包括创建和插入语句)、一个 EDMX 文件和一个用于加载传记的类。我仍然无法使用它来投影集合导航属性,简单的导航属性可以正常工作。也许有人可以从测试项目中看到我做错了什么......
更新
我尝试了一种新方法,但仍然没有运气:
更新
如果我使用匿名类型,它会出人意料地工作......
entity-framework-4 - 使用 Entity Framework 4.3 的过滤器加载导航属性
几天前,我提出了一个关于映射两个类Message
和MessageStatusHistory
使用 EF 的问题。映射进展顺利,但我StatusHistory
在类中将导航属性Message
与MessageStatusHistory
对象相关联时遇到了一些问题。我只为一个用户加载消息,并且只想要与该用户有关的状态。就像我想显示用户是否将消息标记为已读/未读以及何时。如果我使用如下默认加载机制,它将加载与消息相关的所有历史记录,而与用户无关:
为了仅过滤一个用户的历史记录,我尝试了以下技巧:
我收到错误消息:
我也尝试过发表评论StatusHistory = m.StatusHistory.Where(x => x.UserId == userId).ToList()
,但没有帮助。
请帮助我获取过滤后的 StatusHistory 的消息。
编辑:-上面是用这个代码解决的:
但是,如果我尝试包含对消息的回复:
q.ToList()
使用for将查询转换为 List 时出现错误Histories = m.Histories.Where(x=> x.SenderId == userId).ToList()
。
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 处理的引用?)。