【发布时间】:2011-03-03 06:58:12
【问题描述】:
我有一个相当深的对象层次结构,我试图通过 Entity Framework 4、POCO、PI(Persistence Ignorance)和 Code First 进行持久化。突然间,当我意识到不使用 new() 操作符时,事情开始运转良好。正如最初所写的那样,对象经常使用 new() 来创建子对象。
相反,我使用我对存储库模式的看法来根据需要创建所有子对象。例如,给定:
class Adam
{
List<Child> children;
void AddChildGivenInput(string input) { children.Add(new Child(...)); }
}
class Child
{
List<GrandChild> grandchildren;
void AddGrandChildGivenInput(string input) { grandchildren.Add(new GrandChild(...)); }
}
class GrandChild
{
}
(“GivenInput”暗示此处未显示一些处理)
我定义了一个AdamRepository,比如:
class AdamRepository
{
Adam Add()
{
return objectContext.Create<Adam>();
}
Child AddChildGivenInput(Adam adam, string input)
{
return adam.children.Add(new Child(...));
}
GrandChild AddGrandchildGivenInput(Child child, string input)
{
return child.grandchildren.Add(new GrandChild(...));
}
}
现在,这已经足够好了。但是,我不再“不了解”我的持久性机制,因为我已经放弃了 new() 运算符。
此外,我面临anemic domain model 的风险,因为太多逻辑最终都在存储库中,而不是在域对象中。
再见后,一个问题:
或者说几个问题……
- 此模式是否需要使用 EF 4 Code First?
- 有没有办法在保留使用 new() 的同时仍然使用 EF 4/POCO/Code First?
- 是否有另一种模式可以将逻辑留在域对象中,并且仍然可以使用 EF 4 / POCO / Code First?
- 是否会在更高版本的 Code First 支持中取消此限制?
有时试图去 POCO / 坚持无知路线感觉就像 逆流而上,其他时候感觉 就像在尼亚加拉瀑布游泳一样。尽管如此,我还是愿意相信……
【问题讨论】:
标签: entity-framework-4 poco code-first