没有子导航属性的 EF 一对多外键

2024-04-14

使用代码优先的实体框架和.NET 4,我尝试在父母与孩子之间创建一对多关系:

public class Parent
{
    [Key]
    public int ParentId { get; set; }
    [Required]
    public string ParentName { get; set; }
    public IEnumerable<Child> Children { get; set; }
}

public class Child
{
    [Key]
    public int ChildId { get;  set; }
    [ForeignKey]
    public int ParentId { get; set; }
    [Required]
    public string ChildName { get; set; }
}

正如所指出的here https://stackoverflow.com/questions/8452725/entity-framework-map-foreign-key-without-navigation-property/8455916#8455916,为了将外键关系带入数据库,必须链接实际对象,而不仅仅是它们的 ID。如果子级包含对其父级的引用(example https://stackoverflow.com/a/5543702/1180926).

但是我如何强制执行外键my实现,这是相反的方式(父引用子)?


首先:你不能使用IEnumerable<T>用于集合导航属性。 EF 将忽略此属性。使用ICollection<T>反而。

当您更改此设置时,在您的特定示例中,您不需要执行任何操作,因为外键属性名称遵循约定(主键名称ParentId主要实体Parent)以便 EF 将检测之间所需的一对多关系Parent and Child自动地。

如果您有另一个“非常规”FK 属性名称,您仍然可以使用 Fluent API 定义这样的映射,例如:

public class Child
{
    [Key]
    public int ChildId { get;  set; }

    public int SomeOtherId { get; set; }

    [Required]
    public string ChildName { get; set; }
}

Mapping:

modelBuilder.Entity<Parent>()
    .HasMany(p => p.Children)
    .WithRequired()
    .HasForeignKey(c => c.SomeOtherId);

据我所知,不可能用数据注释来定义这种关系。的使用[ForeignKey]属性需要外键属性所在的依赖实体中的导航属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有子导航属性的 EF 一对多外键 的相关文章

随机推荐

  • CloudKit - NSPredicate 用于查找引用列表中包含指定 CKReference 的所有记录

    我正在开发一个 CloudKit 支持的应用程序 其用户记录类型具有 以下 参考列表属性 我正在尝试构建一个查询来获取关注指定用户的每个用户 即指定用户在以下参考列表中显示为条目的那些用户 我目前正在尝试构建我的NSPredicate为了C
  • HTTP_REFERER 空白,需要替代

    我有一个简单的注册表单 需要跟踪来自一个特定外部引用者的点击次数 这是 PHP 的一个简单任务 SERVER HTTP REFERER 然而 它是空白的 经过一些研究后 我尝试使用一些 javascript document referre
  • 使用 matplotlib 在对数图中设置轴限制

    如何在使用 matplotlib 绘制的点周围创建空间 For example in this plot the bottom left point is cutoff by the axis but I would like a litt
  • 如何判断 HTML5 音频元素何时播放完毕?

    如何判断 HTML5 音频元素何时播放完毕 它会引发我可以收听的事件或类似的事件吗 我需要在音轨结束时做出反应 Thanks 使用 HTML
  • 我可以在不使用本地工作副本的情况下将新文件夹添加到 TFS 存储库服务器端吗?

    我目前正在将一些源代码从 Subversion SVN 存储库传输到我客户的 Team Foundation Server 我偶然发现的一件事是 如果不首先将该存储库中的所有文件拉到本地工作区中的本地工作文件夹 则似乎无法编辑存储库 我正在
  • 如何在 Github Actions 中设置机密?

    官方样板代码注入npm token如下 NODE AUTH TOKEN secrets npm token 如何访问和设置该变量 我在 GUI 中找不到它 转到您在 Github 中的项目 选择Settings tab 点击Secrets左
  • 通过 Laravel 中的链接 href 传递 id

    是否可以通过 Laravel 中的链接 href 传递 id 并显示该页面 例如 projects display 2 我有这个链接 td a href class btn btn info View a td 当鼠标悬停在链接上时 它将
  • 如何使 extjs 手风琴垂直滚动

    在这里摆弄 https fiddle sencha com fiddle 5gv 如果手风琴中有很多面板 它们就会在垂直方向上相互碰撞 并且无法扩展 我想让手风琴的总高度等于标题的高度加上一个面板主体的高度 展开 然后父面板应该只有一个滚动
  • 自 2012 年底起实施@font-face

    我花了几个晚上研究在当今的现代浏览器中实现 font face 的最佳方法 我是一名全职网络 系统开发人员 具有图形设计师的背景 我发现网页设计的机会和可能性变得越来越有趣 因此 我做了一些测试 想听听是否有人对此有建议 更好的想法或意见
  • 禁用所有操作的浏览器缓存,但保留捆绑包的浏览器缓存

    在我正在开发的 MVC 应用程序中 出于安全原因 我们必须阻止所有操作的浏览器缓存 防止用户在注销后返回历史记录 我们使用以下方法实现了这一点这个解决方案 https stackoverflow com a 5664481 2123652
  • 使用 SQL 将多个字段连接成一个

    我有三张桌子tag page pagetag 有了下面的数据 page ID NAME 1 page 1 2 page 2 3 page 3 4 page 4 tag ID NAME 1 tag 1 2 tag 2 3 tag 3 4 ta
  • 如何在 Quarkus 中处理大文件上传

    我的问题有两个 我正在寻找一种在 quarkus 应用程序服务器上实现分段文件上传的方法 该服务器允许程序员访问上传的文件 浏览文档似乎有https quarkus io guides rest client multipart https
  • 使用 VSCode“切换行注释”命令时更改注释符号位置

    是否可以在 VSCode 中自定义注释符号 使用 Python 时为 的位置 例如 如果我的代码是 def my func value 1 我在第 2 行按 CMD 我得到 def my func value 1 我更愿意得到 def my
  • 如何构建此 SQL 查询。合并多个表? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 注意 这不
  • C# Entity Framework 4.1 Lambda Include - 仅选择特定包含的值

    我正在 EF4 1 上执行 lambda select 包括当前语句中的另一个相关 DBSet return dbEntity GameTypes Include a gt a Draws Where d gt d IsActive tru
  • 使用意图从 Unity 应用程序向 Android 应用程序发送数据

    我有两个独立的应用程序 AppA 使用 Android Studio 开发 和 AppB 使用 Unity 开发 AppA 将启动 AppB 这是一个游戏应用程序 用户玩完游戏 AppB 并点击退出按钮后 会将游戏记录 字符串数组 发送回A
  • C/C++ 计算小数位数?

    假设用户输入的是十进制数 例如 5 2155 有 4 位小数 它可以自由存储 int double 等 有没有clever 或非常简单 找出数字有多少位小数的方法 有点像如何通过屏蔽最后一位来发现数字是偶数还是奇数的问题 我知道的两种方法
  • 从构造函数调用的shared_from_this

    我必须在创建对象时在容器中注册该对象 如果没有智能指针 我会使用这样的东西 a class a class register somewhere this 对于智能指针我应该使用shared from this但我不能在构造函数中使用它 有
  • 带可选参数的 TCL 过程调用

    存在一个 TCL 脚本 该脚本具有多个名称相似的过程定义func在不同的命名空间中 程序如下 proc func a puts a 所有这类程序都只有一个参数a 所有此类过程都是从整个脚本中的一行调用的 func a 我需要创建另一个具有相
  • 没有子导航属性的 EF 一对多外键

    使用代码优先的实体框架和 NET 4 我尝试在父母与孩子之间创建一对多关系 public class Parent Key public int ParentId get set Required public string ParentN