Linq-To-SQL传统关系映射

时间:2009-12-07 23:42:19

标签: sql-server linq-to-sql

我正在尝试让Linq2SQL与我的旧数据库一起使用。我目前有一个注释表,它对几个不同的实体是通用的,并映射到m:m。不是每个实体类型映射一个关系表,而是设计此数据库的人决定使用单个关系表和类型列(作为varchar yuck!)。

alt text http://img130.imageshack.us/img130/326/capturefm.png

如何将Foo和Bar映射到Notes集合?这甚至是可能的吗?我没有看到光明。我试图让两个类FooNotes和BarNotes继承自RelateNotes,然后将Type字段映射为描述符。

alt text http://img130.imageshack.us/img130/3153/capture2f.png

这不起作用,我收到以下错误。

Bad Storage property: '_EntityID' on member 'TestLinq.BarNotes.EntityID'.

我不想在Linq2SQL之路上走得太远,然后才意识到这一点。我不允许更改数据库。

非常感谢,

1 个答案:

答案 0 :(得分:0)

我会考虑扩展您的应用设计,以包含基于域模型的分层架构。

通过这种方式,您可以创建满足系统要求的域模型,同时抽象出映射在其下的工作方式。例如,您可以为数据访问层提供一个返回映射实体的公共接口。可以为遗留数据库中旧的“字符串相等”m2m关系创建此接口的实现。有一天,当您准备放弃遗留数据库时,可以为不同的ER db模型创建一个新的实现,这将允许您的域模型(对象模型)和更高层(服务,UI等)保持不变(因为它们全部利用通用接口。)

在对象模型中,您可以定义需要Notes的每个对象,并使每个对象包含每个实例的Notes集合。例如。 Foo有一系列Notes; Bar有一系列Notes。您的Repository接口会在返回这些实体后看到,但该repo的实现会担心它是如何读取并持久保存到db。