升级到 RC 后,创建多对多关系的实体失败

2024-04-01

我有一个项目,其中包含 3 个简单的表、几个 POCO 类以及一个使用代码创建的 DBContext,没有 edml 文件。以下代码设置用于使用实体框架代码优先的测试版,自从模型构建器从测试版更改为 RC 以来,我编辑了 DbContext 代码

表(简单表多对多表的字段声明为外键并具有级联删除):

CREATE TABLE [dbo].[Bookings](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [StartDate] [datetime] NOT NULL,
    [EndDate] [datetime] NOT NULL,
    [AccountId] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Bookings] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)

CREATE TABLE [dbo].[Units](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](100) NOT NULL,
    [Description] [nvarchar](1000) NULL,
    [Beds] [int] NOT NULL,
 CONSTRAINT [PK_Units] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)

CREATE TABLE [dbo].[UnitBookings](
    [UnitId] [int] NOT NULL,
    [BookingId] [int] NOT NULL
) ON [PRIMARY]

POCOS:

public class Unit
{
    [Key]
    public int ID { get; set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }
    [Required]
    public int Beds { get; set; }
    public ICollection<Booking> Bookings { get; set; }
}

public class Booking
{
    [Key]
    public int ID { get; set; }
    [Required]
    public DateTime StartDate { get; set; }
    [Required]
    public DateTime EndDate { get; set; }
    [Required]
    public string AccountId { get; set; }
    public ICollection<Unit> Units { get; set; }
}

数据库上下文

public class BookingDb : DbContext
{
    public DbSet<Booking> Bookings { get; set; }
    public DbSet<Unit> Units { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Unit>()
            .HasMany(u => u.Bookings)
            .WithMany(b => b.Units)
            .Map(m => m.MapLeftKey("BookingId").MapRightKey("UnitId").ToTable("UnitBookings"));
    }
}

创建预订(bookingCarrrier 是前端层提供的辅助类)

public static bool CreateBooking(BookingCarrier carrier, out string statusMsg)
{
    using (var db = new BookingDB())
    {
        var validator = new BookingValidator(2, 3);
        Booking booking = CreateBooking(carrier, db);
        if (validator.Validate(booking.AccountId, booking, -1, out statusMsg)
        {
            db.Bookings.Add(booking);
            db.SaveChanges();
            return true;
        }
        return false;
    }
}

private static CreateBooking(BookingCarrier carrier, BookingDB db)
{
    var units = new List<Unit>();
    if (carrier.SelectedUnit == 0)
        units.AddRange(db.Units.ToList());
    else
        units.Add(db.Units.Find(carrier.SelectedUnit));
    return new Booking
        {
            AccountId = carrier.AccountId,
            EndDate = carrier.EndDate,
            StartDate = carrier.StartDate,
            Units = units
        };
}

执行此代码时,EF 抛出 SqlException 并显示以下消息:

INSERT 语句与 外键约束 “FK_UnitBookings_Units”。冲突 发生在数据库“grashult.dk”中, 表“dbo.Units”,列“ID”。

测试版中情况并非如此。

我知道这是一个相当简单的设置,但由于这是一个业余爱好项目,我正在尝试看看这样的事情可以多么简单地完成。

有人知道导致这种行为的变化吗? EF 4.1 仍然可以实现类似的功能吗?还是我必须去掉数据模型设计器?

问候 杰斯帕·豪格


您必须交换键映射:

modelBuilder.Entity<Unit>()
            .HasMany(u => u.Bookings)
            .WithMany(b => b.Units)
            .Map(m => m.MapLeftKey("UnitId")
                       .MapRightKey("BookingId")
                       .ToTable("UnitBookings"));

我刚刚测试了它,问题是Booking.Id被存储在UnitId and UnitId in Booking.Id.

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

升级到 RC 后,创建多对多关系的实体失败 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • Mysql 联合时间 V.S.一对一单独查询[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我有 n 个查询 q1 q2 q
  • Flex/Actionscript:动态访问静态变量

    假设我有一个 Foo 类 public class Foo public static var bar String test 如何在运行时使用字符串 Foo 或 和 Foo 的实例和字符串 bar 引用 bar I e var x Obj
  • Asp.Net MVC 5 没有 Owin?

    Mvc 5 似乎依赖于 Owin 如果您想自行托管或在 Mac 上运行 这非常有用 但假设我只想像以前的版本一样在 IIS 下运行 并且我对 Owin 提供的功能不感兴趣 默认的 空白 mvc5 模板使用 owin 和 15 个其他依赖项
  • 在 Word VBA 中调用 Application.GetOpenFilename 方法有什么问题?

    也就是说 我在按钮处理程序中调用了以下代码片段 TextBox1 Text Application GetOpenFilename All files 1 Open the Raw Data Files False If TextBox1
  • 制作二叉搜索树

    当我有一个包含 100 个元素的数组列表时 如何制作 BST 3 2 6 7 99 我相信TreeSet是二叉搜索树的实现 由于整数有一个自然排序您可以简单地循环遍历整数数组并将它们全部添加到TreeSet
  • R 图中显示为小数的日期

    我正在尝试沿 x 轴绘制一些带有月份数据的数据 不幸的是 月份显示为小数 有任何想法吗 library zoo Requires the zoo library theMonths lt as yearmon c Mar 2011 Apr
  • C++:隐式类型转换

    我对隐式类型转换有点困惑 鉴于以下程序 float x 4 23423451 double y 4 23423451 float z 101 9876 float res1 x z float res2 y z std cout lt lt
  • AWS Glue — 从作业内访问工作流程参数

    如何从胶水作业中检索胶水工作流程参数 我有一个类型为 python shell 的 AWS Glue 作业 该作业从glue 工作流程中定期触发 该作业的代码将在大量不同的工作流程中重用 因此我希望检索工作流程参数以消除对冗余作业的需求 A
  • 是否有任何 C# 反编译器可以显示与编写方式几乎相同的编码?

    我一直在使用 Reflector 反编译几个简单的 C 应用程序 但我注意到虽然代码正在被反编译 但我仍然看不到它们在 VS 上编写的内容 我认为这就是编译器用机器代码代替人类指令的方式 不过我想我应该尝试一下并在这里询问 也许有一个反编译
  • UserControl 中嵌套 DataGrid 中的 WPF SelectedItem 属性

    I have UserControl 我们称其为CustomDataGrid 其中包含DataGrid 剩下的内容并不重要 SelectedItem的财产DataGrid必须是SelectedItem的财产CustomDataGrid 我希
  • find不为空时如何显示true

    我对 bash 很陌生 我上周才开始学习 我正在尝试搜索文件名 如果找到文件 如何显示消息 这就是我所拥有的 但它一直说 不 echo Enter a file name read findFile if n find HOME type
  • JavaFX XYChart 对数图

    我有一个 XYChart 将数据绘制为 Y 轴上的线性步骤 我想绘制为对数或半对数 Y 刻度 如何更改我的以下代码 public class BaseXYChart extends Application Override public v
  • CollectionView 流程布局自定义

    我正在制作一个个人资料图片集合视图 就像火种编辑个人资料图片一样 我想要第一个单元格比其他单元格大 除了第一个单元格之外还有 2 3 个单元格 其他单元格应该像 3 4 5 有什么建议吗 extension ViewController U
  • 保存的图像未显示在画廊颤振中

    我创建了一个在外部目录中创建文件夹的函数 之后 我从互联网下载图像并将其保存到 图库图像 文件夹中 图像正在保存在文件夹中 但在厨房中不可见 我错过了什么吗 Code void createFolder async String direc
  • SQL Server 中奇怪的日期时间行为

    declare data datetime set data 2011 01 01 23 59 59 999 select data 结果是 2011 01 02 00 00 00 000 第二个例子 declare data dateti
  • 部署 aurelia.cli 构建的应用程序

    我已经构建了一个没有后端的简单 aurelia 网页 现在我有兴趣投入生产 我使用 Aurelia cli 进行捆绑 希望这会很简单 但我不确定如何继续 我应该将哪些文件上传到服务器才能使网站正常运行 谢谢您的帮助 简而言之 au buil
  • 将访问文件读入数据集中

    有没有一种简单的方法可以将整个 Access 文件 mdb 读入 NET 特别是 C 或 VB 中的数据集 或者至少从访问文件中获取表列表 以便我可以循环遍历它并将它们一次添加到数据集中 感谢您的建议 我能够使用这些示例来组合此代码 这似乎
  • jersey RESTful & shiro & oAuth 教程 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个好的 jersey shiro oAuth 教程来保护我的资源 任何提示都会很棒 我写了
  • 地图视图上的虚线

    我可以使用下面的代码 无论如何 在两点之间相当容易地创建一条线 无论如何 我怎样才能使线变成虚线而不是实线 另外 线条越长 是否可以改变不透明度 MKOverlayRenderer mapView MKMapView mapView ren
  • 升级到 RC 后,创建多对多关系的实体失败

    我有一个项目 其中包含 3 个简单的表 几个 POCO 类以及一个使用代码创建的 DBContext 没有 edml 文件 以下代码设置用于使用实体框架代码优先的测试版 自从模型构建器从测试版更改为 RC 以来 我编辑了 DbContext