C# DAL:数据上下文原则理解
不确定是否有“官方”名称,但我所说的DataContext是指透明地维护对象状态的对象,它提供更改跟踪、工作状态功能、并发性以及其他许多有用的特性。(在实体框架中是ObjectContext,在NHibernate-ISession中) 最后,我想到应该在我的应用程序中实现类似的东西(它使用mongodb作为后端,当我们能够跟踪某个属性更改时,mongodb的部分更新就可以了) 实际上,我有几个关于这个问题的问题C# DAL:数据上下文原则理解,c#,architecture,orm,data-access-layer,C#,Architecture,Orm,Data Access Layer,不确定是否有“官方”名称,但我所说的DataContext是指透明地维护对象状态的对象,它提供更改跟踪、工作状态功能、并发性以及其他许多有用的特性。(在实体框架中是ObjectContext,在NHibernate-ISession中) 最后,我想到应该在我的应用程序中实现类似的东西(它使用mongodb作为后端,当我们能够跟踪某个属性更改时,mongodb的部分更新就可以了) 实际上,我有几个关于这个问题的问题 任何人都可以制定对DataContext的需求吗?-您对it的任务和责任有何理解?
问题2的答案:要使POCO类工作,您需要在运行时生成代码,可能需要使用System.Reflection 如果您分析EntityFramework,您将看到它需要虚拟属性来进行更改跟踪。。。这是因为它需要在运行时创建一个生成的类,该类重写每个属性,然后添加代码,在有人更改该属性时通知DataContext EntityFramework还生成初始化集合的代码,这样当有人尝试执行诸如添加和删除之类的操作时,集合对象本身就知道该做什么。DataContext(ObjectContext或EF中的DbContext)就是/模式的实现 我建议您阅读Fowler的书,他在书中概述了几种持久性模式的实现。这可能有助于实现您自己的解决方案
获取Fowler的“企业应用程序架构模式”的副本。它详细介绍了存储库、工作单元和其他相关模式。对,我知道模式的详细信息,主要是如何在“数据上下文”范围内统一所有这些抽象。EF4.1中介绍了使用代理来处理这一点,有可能在EF环境之外使用这些代理吗?不幸的是,我不知道。这些代理完全是在幕后动态创建的。试着在Google上搜索“EntityFramework4.1POCO代理”或类似的东西。顺便说一句,从你对内存中对象的描述来看,我想应该还有一个身份映射。我还担心的是,我已经实现了几个存储库(每个实体)。您的建议是什么?让DataContext成为他们的门面,或者将存储库概括为一个类?当然,身份映射可能也是一个问题。尝试查看工作单元模式。我强烈向你推荐我推荐的那本书。它很好地概括了所有这些持久性和体系结构问题。好的,所以我能够生成一个派生类型,它覆盖虚拟属性并跟踪更改。我对收藏不太清楚。也许,若属性/字段被声明为ICollection,那个么它是可能的——只是用我的ICollection实现替换字段。但如果它被宣布为列表?你怎么看?如果它是一个列表,那么你必须在使用DataContext保存更改时找出添加或删除了哪些元素,因为你必须将原始元素列表与更改的列表进行比较,并确定要更新、插入或删除元素的元素。好吧。。这很简单,为什么我以前没想过呢?(谢谢)