NHibernate关联两种不同存储介质之间的对象

时间:2012-07-10 13:40:07

标签: c# nhibernate

现在我正在研究一种在两种不同存储介质(尤其是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将某些属性映射到标准持久性机制之外的对象?

0 个答案:

没有答案