升级到 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 后,创建多对多关系的实体失败 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz

随机推荐

  • 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