将Abstract和Sub类保存到数据库

时间:2011-01-08 02:33:06

标签: sql database linq-to-sql entity-framework database-design

我有一个抽象类 StrategyBase ”,还有一组子类策略A / B / C 等。子类使用基类的一些属性,并具有一些单独的属性。我的问题是如何将其保存到数据库。

我目前正在使用SqlCE和Linq-To-Sql通过SqlMetal.exe自动创建实体类。我已经看到this question中显示了三个解决方案,但是我无法看到这些解决方案如何与SqlMetal / entity类一起工作。虽然在我看来“具体表继承”可能无需任何手动修改即可。那么另外两个呢,他们会有问题吗?

对于“单表继承”,所有类都不会获取所有变量,即使它们不需要它们吗?对于“类表继承”解决方案,我无法真正看到它将如何映射到实体类以实现有用的目的。我可能会注意到,我扩展了这些部分实体类,用于创建业务对象的类。

我也可以考虑转移到EntityFramework而不是SqlMetal / Linq2Sql,所以也很高兴知道这对于易于实现的模式是否有任何影响。

一个可能需要注意的重要事项是我将不断开发新策略,这使得我必须修改程序代码,可能还有数据库shcema;添加新策略时。

对不起这个问题有点“到处都是”,但希望这里有一些明显的优点/缺点,你可以提供建议。 ?

干杯!

2 个答案:

答案 0 :(得分:2)

实际上,这个确切的问题被问到了很多,并且一直是answered many times。您可能没有使用数据库术语进行搜索。

问题在于在非对象主题领域应用OO术语和思考;使一项普通的直接任务非常复杂和有限。

Martin Fowler和Scott Ambler的书籍对于他们中的很多书都不值一美元,this answer中的详细信息,从 11月10日条目开始。

如果您仍有疑问,请发表评论。

答案 1 :(得分:0)

一个选项是制作StrategyBase Serializable,然后您可以将其存储为数据库中的字符串。我不知道字符串有多大,因为它取决于对象的大小,但您可以创建数据库字段nvarchar(1024)甚至nvarchar(max)。最终,这将导致整个对象存储在单个表字段中string

或者,当你的链接出现时,你可以创建一个模仿每个类的表,每个类对象都是表中的一个字段。