问题标签 [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 回答
2996 浏览

entity-framework-4 - 首先在实体框架代码中使用导航属性

语境:

  • 代码优先,实体框架 4.3.1;
  • 用户----主题,1对多关系;
  • User带有public virtual ICollection<Topic> CreatedTopics导航属性(延迟加载);
  • Topic带有public virtual User Creator导航属性;
  • DataServiceController : DbDataController<DefaultDbContext>, Web API beta, ASP.NET MVC 4 Beta , 单页应用程序;
  • System.Json 用于 Json 序列化;
  • Web API 操作:

    /li>
  • 结果:“w3wp.exe 中出现未处理的 microsoft .net 框架异常”

这里的问题似乎是:我不应该在两个实体中添加导航属性(导致循环引用?),如果我删除类中的CreatedTopics导航属性User,它会再次正常。

因此,在上面列出的类似上下文中,这是我的问题:

  1. 1对多关系的情况下如何处理Navigation Properties ;
  2. 此外,多对多关系怎么样,我必须将它分成两个1 对多关系吗?
  3. 使用导航属性的最佳实践和注意事项是什么?

我已经阅读了许多相关的帖子,但仍然不够清楚:(,

谢谢你的帮助!

院长

0 投票
1 回答
358 浏览

c# - 在 EF 中引用导航属性的父表

我基本上有三张带 FK 的桌子

制作

  • MakeId
  • 品牌名称

模型

  • 型号 ID
  • 型号名称
  • 制造商 (FK)

车辆

  • 车辆编号
  • 购买日期
  • 型号 ID (FK)

我想要一个从 Vehicle 到 Make 的导航属性而不修改我的数据库

我试过了:

但是,当我这样做时,我收到了一个异常:

属性表达式 'd => d.Model.MakeId' 无效。该表达式应表示一个属性:C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'。指定多个属性时使用匿名类型:C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'。

如何在我的 Make & Vehicle 表上创建导航属性而不将 Vehicle.ModelId 列添加到我的数据库?

0 投票
1 回答
136 浏览

c# - 为什么日期时间会阻止导航属性被加载?

我正在对 SQL Server 2012 数据库使用实体框架 4.3.1,并使用 DbContext POCO 方法。

我在数据库中只有两个表,它们看起来像这样:

表

注意:数据库中根本没有指定外键 - 我只是在模型中强制执行关系(我无法更改数据库)。

它们每个都有一行数据,如下所示:

数据

我执行了以下查询以确保连接有效:

验证

现在,我有以下实体:

这是上下文:

当我运行这段代码时,我会Why is this printed?打印到我的控制台 - 我不希望你可以看到应该填写导航属性(我什至明确包含它):

现在,这真的很奇怪:如果我只是从类中注释掉该DeliveryDate属性,One它就可以正常工作(我会This is what I expect打印到控制台)。

这里有什么问题,我该如何解决?

注意:如果我查看变量DeliveryDate上的属性,one它已正确设置为预期值,因此数据库中的日期必须是正确的,并且实体框架完全能够实现它。

更多信息: 它是一个日期这一事实并不重要 - 如果是这样,说一个 nvarchar 它仍然失败 - 似乎任何简单的属性都会导致整个事情崩溃 - 这对我来说就像一个错误......

0 投票
1 回答
1121 浏览

entity-framework - EF Code First - 指向另一个表的多个属性

我有一对简单的类在 EF 4.1 的 Code First 中生成数据库:

在我的程序中,我创建并向其写入一些数据。

请注意,当我读回购买记录时,我得到了 purchase.User 为空的异常——也就是说,.Include 没有为用户提取任何内容。现在,如果我忽略我的 OnModelCreating 中的 salespersonUser 导航属性(或者只是将其注释掉):

该代码有效,并且用户加载到 .Include 中。

当 SalespersonUser nav 属性被忽略时,创建的数据库看起来与您期望的一样。Purchase 表有PurchaseId、UserId 和SalespersonId。但是,一旦您重新添加 SalespersonUser nav 属性(停止忽略它),您最终会在表中得到另外两个键:User_UserId 和 SalespersonUser_UserId(以及原始的 UserId 和 SalespersonUserId)。

此外,生成的 SQL 明确显示了问题所在。

没有导航属性:

并使用 nav 属性:

请注意它是如何提取 UserId,但与 User_UserId 连接的,以及左连接。SalespersonUserId 甚至没有在联接中引用。写入记录后在数据库内部设置了UserId,但User_UserID为空。因此,没有什么可加入的,我们为包含的用户获得 null。

在我看来,这是 EF 中的一个错误,但它可能有设计原因。如果是这样,有人可以为我清理一下,也许可以描述一些可以解决它的流畅的 API 吗?我有点偏爱我的导航属性。

0 投票
2 回答
436 浏览

c# - 实体框架 - 为什么选择导航属性?

我有一个看起来像这样的基本存储库:

  1. User user = _usersRepository.Get().SingleOrDefault(u => u.Username == "gigi"); 这将返回没有 Roles 属性的用户,这没关系。

  2. User user = _usersRepository.Get(new string[] { "Roles" }).SingleOrDefault(u => u.Username == "gigi");这将返回用户和 Roles 属性,这没关系。

  3. List<User> users = _usersRepository.Get().Where(u => u.Username.StartsWith("gi")).ToList();

  4. List<User> users = _usersRepository.Get(new string[] { "Roles" }).Where(u => u.Username.StartsWith("gi")).ToList();

查询 3 和 4 都返回具有 Roles 属性的用户列表。为什么查询 3 返回角色?

LE:这是调用,我在上下文处理后检查用户集合。

LE2:我分别做了同样的事情:

  1. /li>
  2. /li>

在第一种情况下,没有加载角色,在第二种情况下,它们是可以的。

我没有看到我在存储库示例中做错了什么。

LE3:这是工作单元

0 投票
2 回答
3801 浏览

entity-framework-5 - 忽略 OnModelCreating 中的属性

我正在尝试在 Entity Framework 5.0 中使用有界 (Db) 上下文,但在从特定上下文中包含的类之一中排除属性时遇到问题。这是信息(为简洁起见,我将缩短)

BaseContext.cs

IContext.cs

ISuiteContext.cs

SuiteContext.cs

组织.cs:

组织配置.cs:

我如何使用(Web API 测试项目)

以及正在发生的异常:

导航属性“颜色”不是“组织”类型上声明的属性类型。验证它没有从模型中排除,并且它是一个有效的导航属性

我想要的只是让“SuiteContext”能够访问组织,但不能访问子项(颜色和其他一些)

我错过了什么?也许我错误地解释了异常?


更新#1

我试过(没有成功 - 同样的例外):

更新#2

我似乎与OrganizationsConfiguration.cs类和HasMany()方法有关。如果我取出HasMany(o => o.Colors),那么我可以按照我的意图忽略类/属性。但是,这也会导致数据库创建在重新创建时失败。如果我这样做该死,如果我不这样做该死!

0 投票
1 回答
108 浏览

entity-framework - 在 ADO.NET 实体框架中保存导航属性

我正在使用 ADO.NET 实体框架。我使用以下代码在数据库中添加了一个“用户”实体:

'user' 类的 CF 属性是 'people' 类属性的外键。数据库表 'people' 有一条 CF='xyz' 的记录。当方法'dbEntity.SaveChanges();' 执行时,在“用户”数据库表中创建新记录没有问题。问题是导航属性“new_user.people”为“null”,即使在执行“dbEntity.SaveChanges();”之后也是如此。正常吗?

谢谢!

0 投票
1 回答
1827 浏览

asp.net-mvc - How to join ef navigation properties in linq to entities

I try to get the following sql written in Linq to Entities:

Here is my attempt in Linq:

The SheetCollection model:

My diagram looks like this:

enter image description here

I understand that it doesn't work out to equal with a navigation property. But how should this be done in a correct way?

0 投票
1 回答
1045 浏览

entity-framework - 实体框架 POCO - 导航属性不刷新

我对 EF 4 中的 poco 类有疑问。

我有一个 Order 实体,其中包含一个 Customer 实体的外键。

因此,Order 类具有 Customer 类型的导航属性。

它看起来像这样:

当我加载订单时,导航属性 customer 是正确的,但如果 CustomerId 属性发生更改,导航属性不会随着新客户刷新。

如果我在 EF 上下文中调用 DetectChanges() 方法,则会刷新导航属性。

我读过所有属性都标记为虚拟,关系同步是自动的,但这里不是这种情况。

我哪里做错了 ?

谢谢你的帮助

0 投票
1 回答
119 浏览

.net - .NET Entity Framework 如何添加导航属性

我已经使用实体框架创建了数据库模型,该模型在收件人和邮件列表之间具有多对多的关系。当我生成数据库时,它没有让我访问链接表,而只是访问收件人中的属性-recipient.mailingList。我尝试将新收件人添加到数据库并创建新收件人,正确添加了所有属性。检查并有效。但是当我将 MailingList 添加到收件人时,它给了我错误:“英文翻译:IEntityChangeTracker 的多个实例无法引用实体对象。”。我添加了 MailingList 如下。

在出错之前,我可以看到 newRecipient 添加了 mailingLists。在我尝试分配 MailingList 之前,程序添加了 newRecipient 没有问题。谁能告诉我如何将邮件列表添加到收件人?