复合键,其中一个ID组件并不总是更新

时间:2014-05-27 09:27:50

标签: sql sql-server entity-framework

我正在使用Entity Framework 6。

鉴于以下模型:

MyType (Id+Language are keys)
- Id
- Language // will be represented by values like "en", "no", "dk", "de"
- Label

MyValue (Id+SomeOtherEntityId+Language are keys)
- Id
- SomeOtherEntityId
- Language
- Value

我希望Id中的MyTypes列在为该ID提供新语言时自动递增,如果这有意义的话。

示例:

context.MyTypes.Add(new MyType { Label = "Label", Language = "no" });
context.MyTypes.Add(new MyType { Label = "Label", Language = "da" });
context.MyTypes.Add(new MyType { Label = "Label", Language = "nl" });

这给了我一个如下所示的数据库:

| Id | Language | Label |
|----|----------|-------| 
| 1  | no       | Label |
| 2  | da       | Label |
| 3  | nl       | Label | 

虽然我真正想要的是这个:

| Id | Language | Label  |
|----|----------|--------| 
| 1  | no       | Label  |
| 1  | da       | Label  |
| 1  | nl       | Label  | 
| 2  | no       | Label2 |
| 2  | da       | Label2 |
| 2  | nl       | Label2 | 

我目前将ID列设置为Identity,从而使其自动递增。

  1. 从数据库的角度来看,是否可以将其配置为自动递增,具体取决于语言列?
  2. 这可以通过EntityFramework进行配置吗?
  3. 我想另一种方法是让一个单独的Type-table只有一个ID,然后将不同语言的标签链接到此。但是,我希望避免这种情况仅仅是因为这种结构非常简单,并且为了ID而另一张桌子似乎只是增加了一些不必要的复杂性。

    另一个替代方法是从代码中控制它(当插入新的MyTypes时,首先获取正确的ID,然后添加其余的ID。)

    是否有关于此类问题的最佳做法?

1 个答案:

答案 0 :(得分:1)

根据我的知识,你尝试做的事情是做不到的。 (标识是一行的一个不同的值)

两张表似乎对我来说:

tableHead(Id,Code,Blabla)

tableTrans(Id, ExtId, Language, Value), with ExtId as a FK

tableTrans(ExtId, Language, Value) with a composite Key comprisong the FK

然后,您可以通过代码值和语言值进行翻译,并获得可读代码。