【问题标题】:Generate a unique integer for 2 tables in database为数据库中的 2 个表生成一个唯一整数
【发布时间】:2018-01-22 15:01:50
【问题描述】:

我的数据库中有两个表IncomingCheckHistoryOutgoingCheckHistory,还有第三个表Log 需要一个名为HistoryId 的唯一列。这个数字在两个表(IncomingCheckHistoryOutgoingCheckHistory)之间应该是唯一的,所以我不能在这里使用检查的Id 列作为外键。此外,对于每次检查的 2 条记录,此数字应该相同,因此我也不能使用 Log 表中的 hte Id

public IncomingCheckHistory()
{
   public int Id { get; set; }
}

public OutgoingCheckHistory()
{
   public int Id { get; set; }
}

public Log()
{
   public int Id { get; set; }
   public int HistoryId { get; set; } //should be unique for every 2 records
}

是否有使用实体框架生成唯一整数的内置方法?

如果没有这样的方法,对我来说最好的选择似乎是添加第四个表,插入一条记录并在此处使用其 Id 作为值,或者仅根据检查的 Id 生成一个数字。

说明:

系统使用这些记录连接到 ERP 系统。每张支票都需要有 2 条记录(一条用于存款账户,一条用于信用账户)和一个对于两张支票应该相同的标识符号(基本上将两者连接起来),但这个号码不应该用于任何其他检查。

例如,假设我们有 2 张支票,一张传入和一张传出。 IncomingCheck with Id 1 带 ID 1 的 OutgoingCheck

现在如果我想在 Log 表中插入相应的记录,我会这样做:

  1. 为 ID 1(传入)插入一条 HistoryId 为 1 的记录作为存款
  2. 为 Id 1(传入)插入一条 HistoryId 1 的记录作为贷方
  3. 为 ID 1(传出)插入一条 HistoryId 2 的记录作为存款
  4. 为 ID 1(传出)插入一条 HistoryId 2 的记录作为贷方

【问题讨论】:

  • should be unique for every 2 records 背后的意义是什么?对我来说听起来很奇怪,清除它可能有助于解决...
  • 能否使用 GUID,然后对每个表使用相同的 guid?它需要在插入每条记录之前生成,而不是通过表上的标识列等生成,但会给你一个可以在它们之间共享的唯一值。
  • 我不得不同意这在这一点上没有多大意义。对数据进行一些澄清将有很大帮助。也许发布三个表的表定义和一些示例数据来演示您要完成的工作?
  • 从 2012 版开始,sql server 支持序列。对于早期版本,mimic 使用单个表和存储过程非常容易。
  • 您的意思是日志表中的一条记录可以指向传入表中的一条记录,也可以指向传出表中的一条记录?换句话说,传入表中有一条记录与传出表中的另一条记录具有相同的id。你是这个意思吗?

标签: c# sql-server entity-framework ef-code-first


【解决方案1】:

我看到您已将此标记为 ef-code-first。 您可以尝试添加一个名为History 的类,并让传入和传出都继承自History。然后将其配置为使用TPC(每个具体类型的表)。现在您可以记录 History Id 并使用 Id 列自动生成一个唯一的 int。不确定这是否适合您的情况,但它满足要求。 或者,您也可以使用TPT(每种类型的表)来使用历史上的常见内容。

【讨论】:

  • 我也想过这个,但里面没有should be unique for every 2 records 逻辑——这就是我要求澄清这一点的原因......
  • 当记录一起列出时,我认为 OP 意味着唯一。表的命名似乎是有道理的。
  • 这应该可以。我需要使用History 表中的Id 作为系统的HistoryId。让我担心的一件事是,我需要在这些表和另一个表之间建立一对多映射,例如 IncomingChecbook 表有 public virtual List<IncomingCheck> Checks { get; set; }。 EF 可以映射和延迟加载这些表中的记录吗?
  • 是的,英孚可以做到这一点。检查我链接的文章。也可以查看this link
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多