在Linq-to-Sql Designer中,当我没有为抽象基类定义“Base Class Discriminator Value”时,我得到“以'X'为根的继承层次结构并没有定义默认值。”运行时错误,但如果我这样做,我得到“抽象类'类名'不应该被赋予继承鉴别器密钥。”错误。这有什么问题?
编辑:
我自己找到了原因和解决方案。请不要回答我的问题。
即使您知道数据库中没有与任何已定义的继承代码不匹配的行,无论如何您必须为Linq-to-Sql设置“继承默认”属性。但是您不能将您的抽象基类用作“继承默认值”。因此,您必须创建虚拟的非抽象类,它不执行任何操作(在构造函数中抛出异常等)并将其用作“继承默认值”。将“Base Class Discriminator Value”留空。
答案 0 :(得分:0)
我通过将默认鉴别符设置为0来完成我的操作,使基本查找类成为常规类并将默认类设置为查找表。这不需要使用鉴别器。出于支持的原因,我更喜欢这种方法。 2年后,有人可能会删除虚拟记录(故意或意外),并永远找出原因。它只是让它更简单,但你确实对架构有所了解。但是,对于所有ORM,您总是必须做出这样的决定。
我知道你不想要答案,但我这样做了,所以如果有人谷歌他们也知道替代解决方案。这使他们能够做出明智的决定。