【问题标题】:Auto increment a column that is not an identity column自动递增不是标识列的列
【发布时间】:2015-08-03 15:56:59
【问题描述】:

在一个项目中,我在ProjectProjectMembers 之间建立了关系,这样一个项目就可以有一个项目成员列表,而项目成员只能参与一个项目(参见Concurrency Check on an ICollection (during add))。

我想要一个自动递增的字段,但是,它不应该是标识列。

例如,给定一个项目,一旦我们添加了一个新的 ProjectMemeber,该成员将收到一个数字(如 id),使我们能够仅在该特定项目中识别该 ProjectMemeber。

有什么方法可以使用 EF 实现这一点吗?

【问题讨论】:

  • 为什么不能是身份?这就是他们所做的。如果您使用的是 2012+,则可以考虑使用序列。
  • 当我使用 Identity 属性在 ProjectMember(本地 id)中添加一个新字段,然后运行迁移时,我得到:“为表 'ProjectMembers' 指定了多个标识列。每个标识列只有一个表是允许的。”
  • 如果你已经有一个IDENTITY列 - 你需要另一个自动递增值做什么??
  • 您不会有一个包含 ProjectID、MemberID、ProjectMemberID 之类的 ProjectMembers 表。在这种情况下,ProjectMemberID 将是您的身份列。
  • 我认为大多数时候最好的方法是在你的 ProjectMember 表中使用一个 Identity 字段,就像提到的 @aaron 一样。听起来您只需要一个单独的字段来为每个项目重新开始,例如项目 A 将具有 ProjectMember 1 和 2。项目 B 也将具有 ProjectMember 1 和 2。

标签: asp.net sql-server entity-framework


【解决方案1】:

我将拥有三个实体 - ProjectsMembers,还有一个用作关系代理,称为 ProjectMembers

第三个实体只有 3 个字段 - id 用作具有自动增量的标识,ProjectIdMemberId 用作 ForeignKey 关系。添加一个唯一约束,使得 MemberId 必须是唯一的(这会在项目中的成员上实施一对一的关系)。 id 对该项目中的该成员是唯一的。当他们完成一个项目时,该关系代理记录将被删除,从而允许重新分配给另一个项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2016-03-07
    • 2017-04-06
    • 1970-01-01
    • 2018-07-30
    • 2012-06-06
    • 2016-02-22
    相关资源
    最近更新 更多