我正在使用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,从而使其自动递增。
我想另一种方法是让一个单独的Type-table只有一个ID,然后将不同语言的标签链接到此。但是,我希望避免这种情况仅仅是因为这种结构非常简单,并且为了ID而另一张桌子似乎只是增加了一些不必要的复杂性。
另一个替代方法是从代码中控制它(当插入新的MyTypes时,首先获取正确的ID,然后添加其余的ID。)
是否有关于此类问题的最佳做法?
答案 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
然后,您可以通过代码值和语言值进行翻译,并获得可读代码。