我正試圖在用戶和組織之間創建一個消息系統 - 也就是說,用戶可以發送和接收來自用戶或組織的消息。Fluent和NHibernate的泛型
所以,來支持這個系統,我開始與接口:
public interface IPassableObject<F, T, O>
where F : DomainObject
where T : DomainObject
{
Guid PassedItemId { get; set; }
O Item { get; set; }
F From { get; set; }
T To { get; set; }
DateTime Created { get; set; }
}
的想法是以後我希望能夠通過更多的不僅僅是消息 - 像序列化對象。所以,我們有一個3類泛型的類。收件人,發件人,對象
然後我創建了消息類
public class Message<T, F> : DomainObject, IPassableObject<T, F, string>
where F : DomainObject
where T : DomainObject
{
public Message()
{
Created = DateTime.Now;
}
#region IPassableObject<T,F> Members
public virtual Guid PassedItemId { get; set; }
public virtual string Item { get; set; }
public virtual T From { get; set; }
public virtual F To { get; set; }
public virtual DateTime Created { get; set; }
#endregion
}
然後,我做我的表來支持我通過項目:
CREATE TABLE dbo.PassedItems
(
PassedItemId uniqueidentifier NOT NULL,
FromId uniqueidentifier NOT NULL,
ToId uniqueidentifier NOT NULL,
SerializedObject varchar(max) NOT NULL,
Created datetime DEFAULT(GETEDATE()) NOT NULL,
CONSTRAINT PK_PassedItems PRIMARY KEY CLUSTERED (PassedItemId)
)
的ID對我的兩個用戶和組織是guid。現在,我有了用戶 - 用戶消息的流暢映射。我的想法是,我只需要創建4個映射,而不是爲用戶用戶,用戶組織,org用戶和org-org維護4個獨立的類。我希望Nhibernate能夠在表格中引用GUID,並根據指定的類型自動嘗試並拉入對象。
public class UserToUserMessageMap : ClassMap<Message<UserProfile, UserProfile>>
{
public UserToUserMessageMap()
{
WithTable("PassedItems");
Id(x => x.PassedItemId, "PassedItemId").GeneratedBy.Guid();
Map(x => x.Item, "SerializedObject");
Map(x => x.Created);
References(x => x.From, "FromId");
References(x => x.To, "ToId");
}
}
我看到的問題是,當我跑我的應用程序,我得到一個運行時錯誤:
NHibernate.MappingException: An association from the table PassedItems does not specify the referenced entity
因此,將這種方法甚至工作?我究竟做錯了什麼?謝謝!
我嘗試通過指定類型來更改引用。不幸的是,這也不起作用:參考文獻(x => x.From,「FromId」); –
Josh
2009-08-19 22:20:07
僅供參考 - 我們使用的是FluentNHibernate版本0.1.0.363和NHibernate版本2.0.1.4000 – Josh 2009-08-19 22:25:07