ユーザーと組織の間でメッセージングシステムを作成しようとしています。つまり、ユーザーはユーザーまたは組織からメッセージを送受信できます。 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つのジェネリック型を持つクラスを持っています。するために、より、被写体
は、その後、私はその後、私のMessageクラス
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の両方私のためにユーザーと組織はガイドです。今、User - Userメッセージのための私の流暢なマッピングがあります。私は4つのマッピングを作成し、ユーザーユーザー、ユーザー組織、組織ユーザー、組織組織の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
FYI - FluentNHibernateバージョン0.1.0.363およびNHibernateバージョン2.0.1.4000を使用しています – Josh