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

  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • 操作/Lambda 表达式内存管理问题

    我将一个操作存储在局部变量中 然后在该局部变量超出范围后使用 使用前是否有被清理的危险 这是一个例子 public List GetMaps Action
  • 宏可以按参数数量重载吗?

    如何this https stackoverflow com q 9183993 153285工作 如何实现 C99 C 11 可变参数宏以仅根据为其提供多少个参数来扩展到不同的事物 编辑 请参阅末尾以获得现成的解决方案 要获得重载的宏 首
  • C++:将模板参数的模板类型成员添加为好友的正确语法?

    我有一个带有模板类型参数 tTRAIT 的类 我想加一个模板为好友type member aliastTRAIT 但我无法弄清楚语法 这可能吗 template
  • 无缝滚动瓷砖地图

    我正在开发一个自上而下的角色扮演游戏 并且想要实现无缝滚动地图 也就是说 当玩家探索世界时 地图之间没有加载屏幕 也没有通往下一个区域的 门 我有两种方法可以打破世界 在顶层 我有 区域 它只是 9 个 地图 的集合 这些区域仅由目录表示
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • asp.net mvc 4 - 可以在每个线程共享 DbContext 吗?

    From 每个 Web 请求一个 DbContext 为什么 https stackoverflow com questions 10585478 one dbcontext per web request why 我的理解是 DbCont
  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • 非静态类中的静态方法和静态类中的静态方法有什么区别?

    我有两个班级A级和B级 static class ClassA static string SomeMethod return I am a Static Method class ClassB static string SomeMeth
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所
  • C# amo 获取角色完整

    我正在开发一个 SSAS 项目 其中除其他事项外 我需要获取 C 中表格多维数据集的完整用户列表 目前我让它以这样的方式工作 我可以获得角色 但数据不完整 当我调用 Server Database Roles 为了便于阅读而简化 属性并枚举
  • 类模板的 C++ 静态成员 - 链接器警告“多重定义”[重复]

    这个问题在这里已经有答案了 假设出于某种原因 我想要一个类模板 MyTemp 和一些静态数据成员 smDummyVar Mytemp h ifndef MY TEMP H define MY TEMP H template

随机推荐

  • 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