实体框架,代码优先:将主从与零对一关系相结合

2024-03-03

我使用代码优先 EF 有一个简单的主从关系:

public class User
{
     public string Id { get; set; }
     public ICollection<Tasks> Tasks { get; set; }
}

public class Task
{
    public string Id { get; set; }

    [Required]
    public string UserId { get; set; }
    public User User { get; set; }
}

现在我想修改它,以便用户可以执行一项最重要的任务。所以我修改 User 类来添加它:

public class User
{
     public string Id { get; set; }
     public ICollection<Tasks> Tasks { get; set; }
     public string MostImportantTaskId { get; set; }

     [ForeignKey("MostImportantTaskId")]
     public Task MostImportantTask { get; set; }
}

当我跑步时Add-Migration然而,我得到了意想不到的结果。 EF 正在尝试添加一个User_Id列到Tasks表,我不想要,并删除主/详细关系所需的外键:

public override void Up()
{
    DropForeignKey("dbo.Tasks", "UserId", "dbo.Users");
    AddColumn("dbo.Tasks", "User_Id", c => c.String(maxLength: 128));
    AddColumn("dbo.Users", "MostImportantTaskId", c => c.String(maxLength: 128));
    CreateIndex("dbo.Tasks", "User_Id");
    CreateIndex("dbo.Users", "MostImportantTaskId");
    AddForeignKey("dbo.Users", "MostImportantTaskId", "dbo.Tasks", "Id");
    AddForeignKey("dbo.Tasks", "User_Id", "dbo.Users", "Id");
}

public override void Down()
{
    // ...
}

那么如何维护用户和任务之间的主从关系,同时将单个任务的引用添加到User class?


这不是我太熟悉的东西,但我相信你正在寻找的是InverseProperty。身为你的User类与以下对象有多种关系Task,您需要添加InverseProperty给你的Tasks集合将其指向User属性于Task.

所以如果你在你的User class

[InverseProperty("User")]
public ICollection<Task> Tasks { get; set; }

然后,当您运行迁移时,会生成以下代码,这看起来就是您想要的

public override void Up()
{
    AddColumn("dbo.Users", "MostImportantTaskId", c => c.String(maxLength: 128));
    CreateIndex("dbo.Users", "MostImportantTaskId");
    AddForeignKey("dbo.Users", "MostImportantTaskId", "dbo.Tasks", "Id");
}

public override void Down()
{
    DropForeignKey("dbo.Users", "MostImportantTaskId", "dbo.Tasks");
    DropIndex("dbo.Users", new[] { "MostImportantTaskId" });
    DropColumn("dbo.Users", "MostImportantTaskId");
}

基于以下位置的示例实体框架教程.net http://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in-code-first.aspx.

注意:我假设你在哪里引用了Tasks你的代码中的类是一个拼写错误Task.

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

实体框架,代码优先:将主从与零对一关系相结合 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 传递带有自定义数据属性的函数

    是否可以传递具有自定义数据属性的函数 这不起作用 div div function hello console log hello 当我获得该属性时 它是一个值为 hello 的字符串而不是函数 怎么解决这个问题呢 你可以这样做 div d
  • 是否可以在 git-extensions 中为特定文件扩展名设置 diff/merge-tool ?

    我刚刚开始使用 LabView 进行开发 这对我来说是全新的 我想使用 git 扩展来处理我的版本控制 由于源位于 vi格式 我无法使用普通的 diff 工具 源是二进制的 幸运的是 LabView 附带了专用的差异和合并工具 这似乎非常有
  • 关于真实的表示可以假设什么?

    该程序返回0在我的机器上 include
  • HTML 数据在 Android 中从 json webservice 获取的 Webview 中无法正确显示?

    我正在使用 json webservice 从服务器获取 HTML 数据并在 webview 中显示 在 iPhone 中可以完美显示屏幕尺寸 但在 Android 中则不能完美显示 这里我放下了webservice链接和代码以及andro
  • Gemfile.lock 应该包含在 .gitignore 中吗?

    我对捆绑器及其生成的文件有点陌生 我有一份来自 GitHub 的 git 存储库副本 该存储库由很多人贡献 因此我惊讶地发现捆绑程序创建了一个存储库中不存在且不在 gitignore list 因为我已经分叉了它 所以我知道将它添加到存储库
  • Javascript 书签在 Firefox 41 中停止工作

    在 Firefox 41 中 小书签 带有javascript 网址 例如javascript alert it works 从点击或关键字运行 停止工作 有没有什么解决办法可以使用javascript Firefox 41 中的书签 以前
  • OpenID Connect 使用 Office 365 和 spring security 登录

    我需要配置OpenID 连接用一个春季安全过滤器以授权使用我的 Rest API Web 我找到了一个谷歌登录示例 http www baeldung com spring security openid connect 但就我而言 我需要
  • 如何删除两个单词之间的字符串

    我正在使用下面的代码行下载网页 WebRequest request WebRequest Create strURL WebResponse response request GetResponse Stream data respons
  • 根据先前的下拉列表选择显示第二个下拉列表

    首先 我讨厌提出一个已经处理过的问题 但你应该知道我在这个网站上找到的其他选项对我不起作用 基本上 我想构建一个简短的表单 其中有两个下拉框 第一个始终显示 第二个默认隐藏 当选择第一个下拉框中的某个选项时 我希望显示第二个下拉框 这是我的
  • 黑莓开发上的脚本语言?

    据我所知 开发 Blackberry 应用程序的首选方法是 Java 这是吗only way 我梦想有一个快速的应用程序环境 您可以在其中创建 GUI 使用 Blackberry UI 组件 类似于 Blackberry 上的 Tcl Tk
  • 循环遍历矩阵的对角线+1

    我需要循环遍历对角线 1 即对角线右侧的值 1 列 并将值写入数据帧中的列 write csv data frame matrix 1 2 matrix 2 3 matrix 3 4 如何使用函数来做到这一点 而不是仅仅列出值的所有位置 实
  • 使用 C# 从 azure 文件存储递归获取文件

    我想编写一个程序来从天蓝色文件存储中获取文件 但问题是目录深度未定义并且isFile文件的属性始终返回 false using System using System Collections Generic using System Lin
  • 多个型号的评论

    在我的 Rails 应用程序中 我目前设置了评论以与我的帖子模型一起使用 该模型运行正常 如何向我的图书模型添加评论 这是我到目前为止所拥有的 以下是我的评论架构中的内容 create table comments force true d
  • jsx 上的 eslint 缩进

    我正在尝试制作简单的组件 但是当我点击ctrl s它这样做 警告和错误是这样的 eslint 预期结束标签与开始的缩进相匹配 react jsx ending tag location eslint 预期缩进 4 空格字符但发现2 reac
  • iOS 图表 moveViewToX 似乎不起作用

    我正在尝试移动当前显示的数据范围 看了文档 看来应该可以用moveViewToX函数将视图的左侧移动到给定的 x 值 我制作了一个测试代码 其中有 1 个带有按钮的视图 当视图加载到模拟器中时 图表会正确显示 当按钮被点击时 它会调用mov
  • python ssl ssl.SSLError: [SSL: UNSUPPORTED_PROTOCOL] 不支持的协议 (_ssl.c:590)

    使用 python 2 7 10 或 2 7 9 时出现此错误 但适用于 python 2 7 6 尚未测试其他版本 OpenSSL 版本 openssl version a OpenSSL 1 0 1f 6 Jan 2014 built
  • 如何从 Pl/SQL 中的存储函数返回临时 CLOB 实例?

    我的存储函数使用以下命令创建临时 LOB 实例 Dbms Lob CreateTemporary BUFFER TRUE Dbms Lob SESSION where BUFFER是当地人CLOB多变的 之后函数填充BUFFER一些数据并返
  • Android 浏览器中的 SVG

    我知道它本身不支持 但是是否有任何 JS Shims 可以渲染到画布对象或允许我在本机 Android 浏览器上渲染 SVG 的东西 不是 Opera 等 因为我想避免用户需要安装另一个浏览器 我想你想要的是这个库 http code go
  • 多项式回归废话预测

    假设我想用二次 正交 多项式拟合线性回归模型 然后预测响应 这是第一个模型 m1 的代码 x 1 100 y 2 3 x 5 x 2 rnorm 100 m1 lm y poly x 2 prd 1 predict m1 newdata d
  • 实体框架,代码优先:将主从与零对一关系相结合

    我使用代码优先 EF 有一个简单的主从关系 public class User public string Id get set public ICollection