为数据库中的2个表生成唯一的整数

时间:2018-01-22 15:01:50

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

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

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
}

是否有使用Entity Framework生成唯一整数的内置方法?

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

澄清:

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

例如,假设我们有2个检查,一个是传入,一个是传出。 ID为1的IncomingCheck OutgoingCheck with Id 1

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

  1. 将带有HistoryId 1的记录插入Id 1(传入)作为存款
  2. 使用HistoryId 1为Id 1(传入)插入记录作为信用
  3. 将带有HistoryId 2的记录插入Id 1(传出)作为存款
  4. 为Id 1(传出)插入带有HistoryId 2的记录作为信用

1 个答案:

答案 0 :(得分:3)

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