【发布时间】:2018-01-22 15:01:50
【问题描述】:
我的数据库中有两个表IncomingCheckHistory 和OutgoingCheckHistory,还有第三个表Log 需要一个名为HistoryId 的唯一列。这个数字在两个表(IncomingCheckHistory 和OutgoingCheckHistory)之间应该是唯一的,所以我不能在这里使用检查的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 表中插入相应的记录,我会这样做:
- 为 ID 1(传入)插入一条 HistoryId 为 1 的记录作为存款
- 为 Id 1(传入)插入一条 HistoryId 1 的记录作为贷方
- 为 ID 1(传出)插入一条 HistoryId 2 的记录作为存款
- 为 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