现在我正在研究一种在两种不同存储介质(尤其是SQL和SharePoint)之间传播数据的应用程序。具体而言,应用程序在SQL中跟踪“项目”,然后在SharePoint中为每个项目生成关联的网站,并在SQL中存储站点的URL。
现在我的域名由一堆POCO实体组成,这些实体代表存储在SQL中的数据。 NHibernate处理所有这些实体的持久性部分。唯一的例外是“网站”实体,它是代表SharePoint网站的POCO。我编写了一个自定义SharePointDataContext类,它允许我加载网站,跟踪加载后对网站的更改,然后通过SharePointDataContext类上的方法调用将这些更改保留回SharePoint。基本上,整个类只是一个非常简化的Session对象,仅适用于Website类。
目前,“网站”与“项目”之间没有直接关系。相反,Project包含一个属性“SiteUrl”,我可以将其传递到我的SharePointDataContext中,如此
Website web = SharePointDataContext.GetWebsiteByUrl(Project.SiteUrl);
我想要做的是重写我的项目类,拥有像这样的属性
public class Project
{
public virtual Website Web {get; protected set;}
... Other Properties ...
}
然后让NHibernate根据需要从SharePoint处理延迟加载网站。然后每当会话被刷新时,我希望NHibernate处理在我的SharePointDataContext上调用save方法。
我怀疑答案与CustomTypes有关,但我不清楚的是这将如何与我的SharePointDataContext的对象跟踪部分一起使用。现在,该类的工作方式是,您必须从SharePointDataContext的给定实例加载“网站”,进行更改,然后在该上下文的同一实例上调用save,如此
var context = new SharePointDataContext();
var web = context.GetSiteByUrl(siteUrl);
web.Title = "New Title";
context.SaveChanges()
我不确定在静态对象或其他讨厌方法的保存和加载事件期间,如何让我的IUserType实现访问同一个SharePointDataContext实例。
有没有办法处理这种情况,我需要NHibernate将某些属性映射到标准持久性机制之外的对象?