2015-10-26 43 views
0

我有这个实体(无论是在数据库和Entity Framework)的唯一编号/值:产生一列不具有UNIQUE约束

public class LanguageValue 
{ 
    public int ID { get; set; } 
    public long Key { get; set; } // bigint in database 
    public int LanguageID { get; set; } // FK with a Language table in database 
    public string Value { get; set; } // nvarchar(MAX) in database 
    public bool Active { get; set; } // bit in database 
} 

我已经看过这篇文章,但我的问题是有点不同:EF6: How to generate a unique number automatically based on entity Id

我的Key列没有唯一的约束,因为可以有多个具有相同Key值的行。例如:

ID Key LanguageID Value 
--------------------------------------------------- 
1 1  1    Name in Language 1 
2 1  2    Name in Language 2 

我不能使用映射表来执行,而不是一个Key FK因为多个表使用同一表格(产品的名称,类别名称,文章的内容)。

现在无论何时我需要插入ProductCategory记录,我都需要插入相应的语言值。但是,我还没有找到一种方法来生成其中独一无二的密钥,并且,如果两次插入同时进行处理(例如,同时添加产品和类别),则需要更加独特, 。

我正在考虑Guid,这应该是我与RNG的安全赌注,还是有更好的方法来实现它?

+0

ID是您的独特识别码。这与您想要做的有什么不同? – JamieD77

+0

对于每个插入操作符,我需要插入2行(或更多取决于多少种语言),使用相同的'Key',但除了这2行外,其他行都不会有'Key'值。所以它不是ID。 –

+0

我想在一个事务中插入所有'Product'及其2个'LanguageValue'记录,所以在EntityFramework中,我还没有该ID。 –

回答

1

好的,我认为我的问题来自不良的数据库设计。我分隔的LanguageValue表分成两个表,如下面的图,并实现2名职业选手,以前的设计没有:

enter image description here

  1. 我现在可以安全地插入LanguageKeyIDENTITY
  2. 我现在可以获得FK产品和类别的NameLanguageKey,这是以前不可能的,因为Key不是唯一的。
+0

很高兴你找到了一个好的结果。顺便说一句,恕我直言,只有在您的OP中呈现LanguageValue表/类,我认为你模糊了你的问题。上面的扩展图说明了你以后所做的更好。无论如何,再加上1分享最终解决方案 –