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 列未像标识列那样自动递增 的相关文章

  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • 从 future 中检索值时的 SIGABRT

    我在使用 C 11 future 时遇到问题 当我打电话时wait or get 关于返回的未来std async 程序接收从mutex标头 可能是什么问题呢 如何修复它 我在 Linux 上使用 g 4 6 将以下代码粘贴到 ideone
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 序列化和反序列化 Visual Studio 解决方案文件 - 或以编程方式编辑?

    我想以编程方式添加和删除项目 解决方案文件夹和其他项目 例如解决方案的资源文件 但我不确定最好的方法是什么 对于那些不知道的人 高度简化 解决方案文件 sln 通常如下所示 Microsoft Visual Studio Solution
  • 实体框架 CTP 4 - 代码优先自定义数据库初始值设定项

    我想实现自定义数据库初始化策略 以便我可以生成数据库架构并使用提供的用户 ID 和密码将其应用到现有的空 SQL 数据库 不幸的是 内置策略无法提供我正在寻找的内容 The default strategy creates the DB o
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 使用 foreach 循环和 XmlNodeList C# 将新节点附加到节点列表

    目前我处理的是这样的XML类型 XML FILE http 20drive google com open id 0By5BxgNi9eGcRldxcEZNU0FDTzQ 参考XML文件 我想检查一个节点 如果找不到该节点 我必须将该节点附
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro
  • Sql 查询抛出标识符太长。最大长度为 128

    我正在处理一个简单的更新查询 在执行查询时看到以下错误 我非常清楚 这根本不应该是一个长度问题 可能是什么问题 Error 以identifier开头的标识符太长 最大长度为 128 我的查询 update dbo DataSettings
  • g++ C++0x 枚举类编译器警告

    我一直在将可怕的 C 类型安全伪枚举重构为新的 C 0x 类型安全枚举 因为它们是way更具可读性 不管怎样 我在导出的类中使用它们 所以我明确地将它们标记为导出 enum class attribute visibility defaul
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • c# 模拟 IFormFile CopyToAsync() 方法

    我正在对一个异步函数进行单元测试 该函数将 IFormFile 列表转换为我自己的任意数据库文件类列表 将文件数据转换为字节数组的方法是 internal async Task
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐

  • 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