【问题标题】:Getting unique IDs from a database for a non-unique column - asp.net mvc code first从数据库中获取非唯一列的唯一 ID - 首先是 asp.net mvc 代码
【发布时间】:2014-07-10 19:10:38
【问题描述】:

我有一个相当独特的问题,所以我想我会在这里问:

我需要组合一个 Code First 模型,其中用户有 2 个 ID 字段,一个是唯一的(分别标识每个用户),一个对每个用户来说不是唯一的(用于分组目的)。

如何在其中获取有时从数据库中获取其值的字段(唯一的),有时由我的代码设置(当我使用它进行分组时)?

是否有任何注释可以提供帮助,所以当我分配一个值时,它就是使用的那个,当我不分配任何东西时,它会自动获得一个新的 ID?

【问题讨论】:

  • 所以你需要一个主ID,它是唯一的。每当您将某些内容添加到数据库中时,这个都会自动创建。然后您想要的另一个 id (group_id) 是您需要设置的唯一一个。如果您不提供,您可以将数据库设置为自动将 group_id 设置为 1(默认值)。
  • 我的问题是:当我不为其提供值时,我能否以某种方式获得一个唯一的 group_id,并在其他时间拥有我想要的任何值?
  • 嗯...我不知道在数据库本身中有什么方法可以做到这一点,但也许你在访问它的地方,你可以保留你已经拥有的所有 group_ids 的列表。因此,当您想要一个独特的时,只需将一个添加到您拥有的最大的中,然后使用它?
  • 这在我的情况下是不可能的,但是引入一个新的实体(组)应该可以解决这个问题。我现在正在测试。谢谢你的帮助,波波!
  • 您可以在该表上创建触发器。如果没有(NULL)被插入到字段中,生成一些东西。

标签: sql-server asp.net-mvc asp.net-mvc-5 code-first


【解决方案1】:

执行此操作并让数据库生成值的唯一方法是使用触发器。由于这是一个代码优先项目,您可能不想这样做。

恕我直言,最好的解决方案是将 GroupId 设为 GUID,然后在数据对象构造函数中将其设置为 Guid.NewGuid()。这样,默认情况下它始终具有唯一值,如果您设置属性,它将使用您提供的值。默认情况下,您会获得唯一性,并在需要时进行分组。由于它是在代码中维护的,因此您不必担心在其他地方维护触发器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多