我最近一直在阅读Louis Davidson关于Sql Server数据库设计的书,并发现它非常有用。我已经接受了很多我之前不知道的概念(或任何东西)。主要是 - 我选择了一种设置数据库关系的方法,我之前没有尝试过。
基本上,您使用代理键作为表PK(自动递增的id字段),然后设置一个或多个由一个或多个唯一键组成的备用键。然后,Theese alternate kays将是用于关系的值(或PK,如果这对于给定的关系更有意义)。
我重新设计了一个旧的数据库,由于设计不佳而导致一些数据不一致,对我来说,这是一种新的思维方式。
在数据库级别,它运行良好。 Tha关系以他们应该的方式运作,并且以一致,可靠的方式强制执行约束。
无论其
我无法让它在Entity Framework或Linq to Sql类中正常工作。我在EF的V1中看到,它只是扁平化不会支持这种关系 - 所以我转移到Linq到Sql,看看事情是否会更好。他们似乎做了,因为我从数据库导入类时自动映射出所有关系。问题是,当我尝试保存数据时,由于InvalidCastOperation异常,我无法将数据保存到数据库。
所以我有几个问题:
我希望有人可以对此有所了解,因为我对此感到非常沮丧。我无法在网上找到关于这个主题的任何好材料 - 所以希望有人在这里有答案或者能指出我正确的方向。
非常感谢!
编辑 - 解决方案。
我最终做的是这个 - 我回到使用实体框架和重新设计数据库模式。在大多数情况下,我重新构建了依赖主键而不是备用键的关系。如果那不是一个选项 - 我对EF布局进行了一些修改。我实施了依赖于AK的关系 - 那时EF抱怨。为了解决这个问题,我必须删除关系的许多方面的外键属性,此时EF接受关系。
答案 0 :(得分:0)
1)是的。
2)如果您可以在L2S模型中将备用键标记为主键,并将实际PK标记为PK,那么它将起作用。
3)从db的角度来看,没有任何问题,但正如您所注意到的那样,L2S或EF不支持它。就个人而言,我更喜欢永远让FK指向PK并且只使用AK进行查找。