c# - Fluent 和 NHibernate 的泛型

标签 c# generics fluent-nhibernate nhibernate-mapping

我正在尝试在用户和组织之间创建一个消息系统 - 也就是说,用户可以发送和接收来自用户或组织的消息。

所以,为了支持这个系统,我从一个接口(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/

相关文章:

java - 如何从泛型类型参数中获取 `.class` 属性?

c# - Fluent Nhibernate - 通过分组连接查询

c# - 将泛型类 T 存储在变量中并在子方法中重用它

c# - 从二进制形式转换 float NaN 值,反之亦然会导致不匹配

c# - 如何构建 xml 部分并保存到文件(本身不是有效的 xml 文档)

generics - F# 使用类型变量调用内联函数

java - 在 Java 中,我们应该在处理多个接口(interface)时使用泛型吗?

c# - 从 Index.cshtml 以外的 MVC Razor View 调用时,Ajax 调用失败

nhibernate - FluentNHibernate 多对一引用,其中外键不是主键,列名不同

c# - 在 PostgreSQL 中生成用于将 IPAddress 映射为 INET 类型的表?