我遇到的问题是在声明继承类的新实例后将Linq2Sql与继承一起使用时,discriminator属性仍然设置为其初始值,而不是子类型的正确值。将它附加到上下文并调用SubmitChanges()后,它会获得正确的值。有时候我想要声明一个继承类型的新对象,并在基类上调用方法,基类知道它正在使用的继承类型,最合乎逻辑的选择是使用discriminator属性。
有没有办法强制设置鉴别器属性?我不想去我的所有子类并为上下文已经知道如何操作的东西实现OnCreated()部分方法。
答案 0 :(得分:0)
我确实提出了一个稍微好一点的解决方法,而不是将代码放在每个继承类的OnCreated()方法中,并认为我会留在这里以防万一有人在这里绊倒。
在基类的OnCreated()中,我添加了类似于此的代码:
partial void OnCreated()
{
if (this is BaseClass1)
{
this.[DiscriminatorProperty] = DiscriminatorValueForBaseClass1;
}
else if(this is BaseClass2)
{
this.[DiscriminatorProperty] = DiscriminatorValueForBaseClass2;
}
}
它仍然复制了上下文已经知道如何操作的功能,但至少我没有在每个基类中实现OnCreated()。我也不喜欢这样的事实:如果添加了一个新类或者鉴别器值发生了变化,你必须在DBML和OnCreated()中更新它。出于这个原因,我仍然喜欢上下文分配值的方法,实际上它应该在创建继承的类时执行此操作。