我正在尝试在用户和组织之间创建一个消息系统 - 也就是说,用户可以发送和接收来自用户或组织的消息。
所以,为了支持这个系统,我从一个接口(interface)开始:
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
}
然后,我制作了 table 来支撑我传递的元素:
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 个映射,而不需要为 user-user、user-org、org-user 和 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
那么,这种方法会奏效吗?我究竟做错了什么?谢谢!
最佳答案
那么“从”和“到”的映射是什么样的?
因为我认为 NH 没有如何映射这些实体,因为您没有提供映射信息。
总的来说,在我看来,您好像在重新发明轮子,您是否研究过 Web 服务(SOAP 和 REST)、消息队列、远程处理 (.Net) 等技术堆栈。以及 WCF、ASMX(Web 服务)、nServiceBus、MassTransit、MSMQ 等特定实现,仅举几例...
奥利
关于c# - Fluent 和 NHibernate 的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1302776/