与可为空外键的一对一关系

2023-12-13

我想在 EF 中创建一对一关系,其中外键可以为空(因此,可以将其称为 0..1-to-0..1)

public class ProductInstance
{
    public int Id { get; set; }

    public int SaleId { get; set; }
    public Sale Sale { get; set; }
}


public class Sale
{
    public int Id { get; set; }
    public ProductInstance ProductInstance { get; set; }
}

FluentAPI配置:

modelBuilder.Entity<Sale>()
   .HasOptional(x => x.ProductInstance)
   .WithOptionalPrincipal(x => x.Sale);

但它在表中生成两列ProductInstance:

  • Sale_id- 外键
  • SaleId

这是生成的迁移代码:

 CreateTable(
            "dbo.ProductInstances",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    SaleId = c.Int(nullable: false),
                    Sale_Id = c.Int(),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.Sales", t => t.Sale_Id)
            .Index(t => t.Sale_Id);

我怎样才能只得到一列SaleId哪个将是外键?


EF 不支持one-to-one与显式 FK 属性的关联 - 没有HasForeignKey流畅的 API,如果你尝试解决它ForeignKey数据注释,您将在迁移过程中遇到多重异常。

唯一的解决办法就是删除ProductInstance.SaleId属性,最终模型:

public class ProductInstance
{
    public int Id { get; set; }
    public Sale Sale { get; set; }
}

public class Sale
{
    public int Id { get; set; }
    public ProductInstance ProductInstance { get; set; }
}

和配置:

modelBuilder.Entity<Sale>()
   .HasOptional(x => x.ProductInstance)
   .WithOptionalPrincipal(x => x.Sale)
   .Map(a => a.MapKey("SaleId"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与可为空外键的一对一关系 的相关文章

  • std::list::clear 是否会使 std::list::end 迭代器无效?

    检查这个代码 include stdafx h include
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 为什么 std::function 不是有效的模板参数,而函数指针却是?

    我已经定义了名为的类模板CallBackAtInit其唯一目的是在初始化时调用函数 构造函数 该函数在模板参数中指定 问题是模板不接受std function作为参数 但它们接受函数指针 为什么 这是我的代码 include
  • 无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

    Visual Studio 2010 会删除 没有其他词 不安全块中函数参数之一中的数据 什么可能导致此错误 调试器显示以下消息 Cannot obtain value of local or argument as it is not a
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 如何对STL向量进行排序?

    我想排序一个vector vector
  • 选择里面的 Include in EF Core

    我有一个如下所示的实体 为简洁起见 部分删除 它包括许多其他属性 public class Tender Key DatabaseGenerated DatabaseGeneratedOption Identity public int I
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 计算Java中列表中每个唯一元素的关键字密度?

    我可以使用以下代码计算文本正文的关键字密度 HashMap
  • ocaml电池编译:未绑定模块Toploop

    Build mode shared ocamlbuild no links syntax otarget byte otarget src batteries help cmo META shared otarget Finished 0
  • 上传多张图片到服务器

    我正在创建一个应用程序 并在我的应用程序中添加了一个选项来从图库浏览图像 然后上传到服务器 我之前问过这个问题 但没有得到好的答案 为了上传图像 我正在遵循本教程http mayanklangalia blogspot in 2014 04
  • Flutter 检测 UTF8 主题标签

    在此模式中 只能检测非 utf8 主题标签 例如 我如何更新此模式以检测非 utf8 和英文字符 pattern r B w b 单个 Unicode 单词 字符可以编码为 0 9A Za z xAA xB5 xBA xC0 xD6 xD8
  • NSCalendar 日期错误

    我正在尝试使用NSCalendar with NSIslamicCalendar标识符 但当天的结果并不好 她是我的代码 NSCalendar calandar NSCalendar alloc initWithCalendarIdenti
  • 无法将 (PFUser!, NSError) void 类型的值转换为预期参数类型 PFUserResultBlock

    我对 swift 和编程都很陌生 但我正在尝试检索检查用户是否可以登录 并且我相信我做了 Parse 建议的操作 但是我收到了此错误 并且不确定原因 这是我的代码 PFUser logInWithUsernameInBackground u
  • 从 J2SE 应用程序中的 persistence.xml 外部化凭证

    我正在编写一个使用 JPA 进行持久性的 J2SE 应用程序 无企业容器 这是我的persistence xml
  • 如何在 Windows 7 上注册自定义程序来处理 mailto 协议

    好的 这可能是我的系统的问题 但我很难让 Windows 7 将我的自定义 exe 识别为 mailto 协议的默认处理程序 首先 我见过这个 以编程方式向 mailto 协议注册 Windows 程序 接下来 我看到了这些 如何使用 Wi
  • C 语言中的非阻塞 I/O? (视窗)

    我正在尝试在 Windows 终端应用程序上获得非阻塞 I O 仅限 Windows 抱歉 如果我想要一个较短的输入时间 让用户可以按下按钮 但如果他不按下按钮 输入就会停止并且程序会继续执行 该怎么办 例如 一个从 1 计数到用户按下某个
  • MapPageRoute 破坏集成 MVC/WebForms 应用程序中的 ActionLink

    我有一个用 ASP NET 4 0 开发的现有 Web 应用程序 我想向应用程序添加 MVC 功能 因此我按照 Scott Hanselman 的文章将 MVC 集成到应用程序中将 ASP NET MVC 3 集成到现有升级的 ASP NE
  • Jasper Report HTML 项目符号悬挂缩进

    我有一个 Jasper 报告 它使用 HTML 标记来显示 li 标记列表 然而 似乎即使使用最新版本的 Jasper 报告 它仍然无法正确执行悬挂缩进 这就是我要的 TEST TEST TEST TEST TEST TEST TEST T
  • 我们如何创建动态文本视图?

    如何在代码中而不是在 xml 文件中创建文本视图 这是因为我的应用程序中的文本视图数量将根据某个整数发生变化 这是动态创建TextView的代码 LinearLayout layout LinearLayout findViewById R
  • 在网络视图中显示 PDF

    我想在我的应用程序中显示 pdf 文件 我的网络服务为我提供了 pdf 我想将其下载到 SD 卡 然后我想通过 webview 在我的应用程序中显示该 pdf 我也曾因 Android PDF 显示问题而苦苦挣扎了一段时间 我采用了与您提到
  • OWL2 使用一个不同的公理对子类进行建模

    我正在尝试使用 OWL 2 DL 使用 Protege 对一些词汇数据进行建模 我的主类是 Lemma 它有许多公理 使用曼彻斯特语法 Every Lemma hasLanguage some Language Every Lemma ha
  • 在 Node.js 中发送电子邮件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我最近开始编写我的第一个 Node j
  • 如何使用seaborn.objects旋转xticks

    碰巧 有没有办法旋转下图中的 xticks 只是为了让它更具可读性 通常sns xticks 在新的seaborn objects开发中不起作用 这太棒了 tcap assign date time2 tcap date time dt d
  • python 3.5 - django 1.10 - mysqlclient windows 7安装错误

    在 django 中配置 mysql 时 我遇到了非常令人不安的问题 我在 Ubuntu x64 上使用 python 3 5 和 Django 1 10 做到了这一点 但我无法在 Windows 7 上做到这一点 我几乎尝试了一切 我希望
  • goDaddy 网站数据库用户访问被拒绝

    我正在尝试从 godaddy 查看我的网站 域名是在其他地方注册的 托管是来自godaddy 更改 DNS 设置后 我在 godaddy 中创建数据库并导入其中的所有表 之后 我创建了一个用户名并将其授予所有权限 然后 当我尝试连接到数据库
  • WCF 超时错误 - 即使在增加值之后

    我的客户一直抱怨他们收到超时错误 但我没有看到我这边生成的跟踪文件 有人能告诉我如何解决这个问题吗 我已经将 receiveTimeout 增加到 15 分钟 00 15 00 我在 WCF 服务端和客户端都执行了此操作 我的服务不是一个长
  • 与可为空外键的一对一关系

    我想在 EF 中创建一对一关系 其中外键可以为空 因此 可以将其称为 0 1 to 0 1 public class ProductInstance public int Id get set public int SaleId get s