EF6 CodeFirst 我的 [Key] Id 列未像标识列那样自动递增

2024-03-01

我有几个类需要从拥有 Id 的公共基类派生。暂时忽略除其中一个之外的所有内容,假设我们有:

public class MyBase {
   [Key]
   public int Id { get; set; } 
}
public class MyName : MyBase {
   public string Name { get; set; }
}

我的上下文(DataContext)如下所示:

public DbSet<MyName>MyNames { get; set; }

// to avoid having EF make a MyBases table and instead map 
// MyBase.Id into MyNames and my other derived classes I do this ...

protected override void OnModelCreating((DbModelBuilder modelBuilder) {
   modelBuilder.Entity<MyBase>()
            .Property(c => c.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

   modelBuilder.Entity<MyName>()
            .Map(m => {
                    m.MapInheritedProperties();
                    m.ToTable("MyNames");
                });
}

当我启用迁移、添加迁移初始和更新数据库时,生成的数据库是我没有得到名为 MyBases 的表,而是得到了 MyNames 中的 Id 列

   dbo.MyNames
   -----------
   Id (PK, int, not null)
   Name (nvarchar(max), null)

到目前为止一切顺利,所有这些都已编译和构建,然后我使用如下所示的内容对其进行测试:

   using ( DataContext dc = new DataContext()) {
      var jj = new MyName { Name = "Janice Joplin" };
      dc.MyNames.Add(jj);
      dc.SaveChanges();

      var jh = new MyName { Name = "Jimmy Hendrix" };
      dc.MyNames.Add(jh);
      dc.SaveChanges();
   }

这是第一次工作(添加 Janice 时 Id = 0),但是not第二个...吉米遇到重复密钥异常。请注意(为了充分披露),我实际上是在代码的另一部分中创建 jj 和 jh 对象,然后将它们作为 MyBase 对象传递到此方法(上面),然后将它们强制转换回 MyName 对象(如果它们就是这样的话)。我希望这不是问题。

我想如果所有内容都在一张表中,则 Id 可以标记为 Identity,并且 @@IDENTITY 可用于分配对象 Id 值。也许我最终需要创建一个 MyBases 表,并首先创建该记录,然后将 Id 复制到事务中的派生表中。最好的方法是什么?

对于这个 EF6 CodeFirst 新手的任何帮助,我们将不胜感激。谢谢。


我记得当我以前做 EF 时,我会使用 Identity 创建一个表,并在类中将 id 列属性为

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

所以我假设你的代码应该是

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

EF6 CodeFirst 我的 [Key] Id 列未像标识列那样自动递增 的相关文章

  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 如何从 PostgreSQL 中的时间戳列值提取一天中的时间(或小时)?

    我正在尝试从 PostgreSQL 中的 时间戳 列中提取一天中的时间 这是我的做法 但是 太糟糕了 知道如何做得更好吗 SELECT date part hour date demande text hours date part min
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • AWS Rekognition 检测标签无效图像编码错误

    我正在使用 boto3 调用识别的检测标签方法 该方法将图像 以 Base64 编码字节的形式 作为输入 但是我不断收到 InvalidImageFormatException 并且我不明白为什么 我已阅读文档并查看了一些示例 但我真的不明
  • Intellij 打开文件资源(忽略目标文件夹)

    当我使用 command shift o 命令时 我会收到以下弹出窗口 问题是在 Java EE 应用程序中将会出现目标中的重复项文件夹 有时我开始编辑错误的文件 我不想列出它们 请参阅图片 有没有办法排除文件夹 另外 还有一点 有时 in
  • 如何使用 Python 的 timeit 对代码段进行计时以测试性能?

    我有一个 python 脚本 它可以正常工作 但我需要编写执行时间 我已经用谷歌搜索过我应该使用timeit https docs python org 2 library timeit html但我似乎无法让它发挥作用 我的 Python
  • `a

    我很好奇我是否可以使用这个a
  • Java中修饰符关键字顺序

    每次我用Java编写一个方法时 关键字的数量都多于public void 每次我都会用另一种方式写 有时 static public void 有时 public static void etc 这些关键字的最佳顺序 最佳实践 是什么 ab
  • 创建错误消息 Delphi 7

    好的 我目前是一名 11 年级的学生 正在学习 IT 我正在尝试完成一项实际作业 但遇到了一些问题 我使用的教科书没有告诉我如何在用户未在 RichEdit 中输入数据时创建错误消息 谁能建议我如何做到这一点 感谢您抽出时间提供帮助 这是引
  • UISlider 在停止更改值后评估结果

    我有一个连续的 UI 滑块 我在值发生变化时获取该值 并使用它来计算放入文本字 段的值 我将值更改出口链接到执行计算并且工作正常的方法 但我还想要一种在用户抬起滑块后触发的方法 该方法有效地对最终设置值进行一次评估 我尝试连接 did en
  • 如何修复 DefaultKotlinSourceSetKt 的初始化错误?

    通过项目构建 或简单的 Gradle 同步 我遇到以下错误 导致 java lang NoClassDefFoundError 无法初始化类 org jetbrains kotlin gradle plugin sources Defaul
  • Roslyn .rsp 文件中的引用

    我在 CSharpInteractive rsp 中看到您可以使用 r 添加对 GAC 中 DLL 的引用 如何添加对自己的 DLL 的引用 我尝试了System Reflection Assembly LoadFrom 它没有失败 但不起
  • linq to sql ExecuteQuery() 作为 IQueryable

    ExecuteQuery 方法返回 IEnumerable 但有没有办法让它返回 IQueryable 嗯 你可以打电话AsQueryable 但它不会有任何好处 问题是当你使用ExecuteQuery 查询不是可组合的因为 LINQ to
  • 如何通过 Scala 反射访问默认参数值?

    假设我有一堂课 case class Foo id Int name String note Option String None 自动生成的伴生对象中的构造函数和 apply 方法都采用三个参数 通过反射查看时 第三个参数 注 被标记 p
  • Morgan (node.js):使用自定义格式时着色状态代码(如“dev”中)

    我正在使用 Morgan 登录 Node js 我喜欢预定义格式模式 dev 中提供的状态代码着色 但我使用的是自定义格式 如何获得与 开发 模式相同的颜色 根据摩根文档 开发格式如下 method url status response
  • 在 SQLite 中获取数字的 ceil 值

    所以我明白了这个问题 https stackoverflow com questions 7129249 getting the floor value of a number in sqlite有一个很好的答案 但无论如何我都想向上舍入
  • 活动 android 中的自动增量

    我尝试使用active android 我对如何在表中实现自动增量字段有疑问 在他们的文档中 他们提供了这样的代码 Item item new Item item remoteId 1 item category restaurants i
  • SQL VIEW 应该始终处于 1NF 中吗?

    SQL VIEW 是一个全局逻辑表 可能会也可能不会持久化 但它仍然是一张桌子 因此 VIEW 是否应该始终遵循第一范式 1NF 即没有重复的行 只有标量类型 没有从上到下或从左到右的排序等 那么更高的范式呢 对我来说 我的应用程序 消耗
  • 链式异常有什么优点

    我不明白在代码中使用链式异常有什么好处 考虑到Java 世界中的 ResourceLoader 示例 http www javaworld com javaworld jw 09 2001 jw 0914 exceptions html 如
  • 使用APACHE POI转换PPT转图片时汉字转成方块

    当我尝试使用 Apache POI 项目来转换我的项目时遇到问题PPT到图像 我的代码如下 FileInputStream is new FileInputStream test ppt SlideShow ppt new SlideSho
  • SVN 锁定错误:锁定令牌 URI 的方案错误

    我最近尝试在 SVN 结账中锁定一个文件 但出现以下错误 svn lock m 一条评论 File1 pas svn 警告 W160037 锁定令牌 URI C Program Files x86 VisualSVN Server gt e
  • 如何在 NSWindow 中显示工作表视图

    How do I implement the view in following image The view which appears when button is clicked in System Preferences gt Ne
  • EF6 CodeFirst 我的 [Key] Id 列未像标识列那样自动递增

    我有几个类需要从拥有 Id 的公共基类派生 暂时忽略除其中一个之外的所有内容 假设我们有 public class MyBase Key public int Id get set public class MyName MyBase pu