Linq to Sql和Non-PK,unique-FK关系问题

时间:2009-03-25 09:27:27

标签: sql sql-server linq linq-to-sql entity-framework

我最近一直在阅读Louis Davidson关于Sql Server数据库设计的书,并发现它非常有用。我已经接受了很多我之前不知道的概念(或任何东西)。主要是 - 我选择了一种设置数据库关系的方法,我之前没有尝试过。

基本上,您使用代理键作为表PK(自动递增的id字段),然后设置一个或多个由一个或多个唯一键组成的备用键。然后,Theese alternate kays将是用于关系的值(或PK,如果这对于给定的关系更有意义)。

我重新设计了一个旧的数据库,由于设计不佳而导致一些数据不一致,对我来说,这是一种新的思维方式。

在数据库级别,它运行良好。 Tha关系以他们应该的方式运作,并且以一致,可靠的方式强制执行约束。

无论其

我无法让它在Entity Framework或Linq to Sql类中正常工作。我在EF的V1中看到,它只是扁平化不会支持这种关系 - 所以我转移到Linq到Sql,看看事情是否会更好。他们似乎做了,因为我从数据库导入类时自动映射出所有关系。问题是,当我尝试保存数据时,由于InvalidCastOperation异常,我无法将数据保存到数据库。

所以我有几个问题:

  1. 这是Linq To Sql的限制吗?
  2. 如果是这样,有办法解决 它?优选没有实施 用于保存,更新和删除的sprocs - 类型安全是我想要的 喜欢保持。
  3. 这是设计数据库的方式吗? 关系“正确”和/或a 好的做法?
  4. 我希望有人可以对此有所了解,因为我对此感到非常沮丧。我无法在网上找到关于这个主题的任何好材料 - 所以希望有人在这里有答案或者能指出我正确的方向。

    非常感谢!

    编辑 - 解决方案。

    我最终做的是这个 - 我回到使用实体框架和重新设计数据库模式。在大多数情况下,我重新构建了依赖主键而不是备用键的关系。如果那不是一个选项 - 我对EF布局进行了一些修改。我实施了依赖于AK的关系 - 那时EF抱怨。为了解决这个问题,我必须删除关系的许多方面的外键属性,此时EF接受关系。

1 个答案:

答案 0 :(得分:0)

1)是的。

2)如果您可以在L2S模型中将备用键标记为主键,并将实际PK标记为PK,那么它将起作用。

3)从db的角度来看,没有任何问题,但正如您所注意到的那样,L2S或EF不支持它。就个人而言,我更喜欢永远让FK指向PK并且只使用AK进行查找。