2

有一个Linq-To-Sql模型:

abstract class Foo
{
    public int Id { get; set; }
    public Guid Identifier { get; set; }
    public string Data { get; set; }
}

还有一些后代:

sealed class FooInheritor1 : Foo { }
sealed class FooInheritor2 : Foo { }
sealed class FooInheritor3 : Foo { }

我想通过Linq-To-Sql从数据库中检索数据并将其存储回来。

为了实现这一点,我将通过将结果转换为非抽象继承者来查询数据库,如下所示:

var foos = dataContext.Foos.Where(someCondition).Cast<FooInheritor1>().ToArray();

我也想像这样存储一些数据:

dataContext.Foos.InsertOnSubmit(new FooInheritor1());
dataContext.Foos.InsertOnSubmit(new FooInheritor2() { Data = "Hi" });

但是,提交时会引发异常:

System.Data.Linq.dll 中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理。附加信息:对象引用未设置为对象的实例。

我对此进行了谷歌搜索,发现如果我将一些层次结构属性应用于具有指定列的模型, Linq-to-Sql可能会满足我的需求。IsDiscriminator但它告诉我Guid类型属性不能是鉴别器列。

然后我在模型上创建了一个类型的虚拟属性,string并用它标记了它,ColumnAttribute但是引发了另一个错误,解释我它无法将列插入数据库。事实证明,Linq-to-Sql会尝试这样做并且会失败,除非我也在我的数据库表中创建那个虚拟列。

最后,我如何实现我想要的功能?我如何告诉它我只是希望模型是抽象的(因为它应该是)并且我可以以正确的方式处理它?

4

1 回答 1

0

经过多次尝试,事实证明,没有办法实现我想要实现的目标。

我以某种特定方式做了我最好的解决方法,这绝对不是广大观众的首选。

于 2013-08-14T09:13:46.463 回答