私は、別のシステムに格納されているコードのオブジェクトに逆シリアル化されたアイテムのId
を保存するデータベースを持っています。私は、Fluent NHibernateを使用して、データベースと外部サービスからのデータで構成されるドメインモデルエンティティを構築しようとしています。例がこれをより良く説明します。データベースでは、私はこのように見ているテーブルを持っている:Fluent NHibernateのカスタムタイププロパティのマッピング
CREATE TABLE entities
(
id integer NOT NULL,
custom_thing text NOT NULL,
CONSTRAINT entities_id_pk PRIMARY KEY (id)
);
それはPostgreSQLのですが、問題はデータベース固有ではありません。今のコードで、私は、これらのクラスがあります。
class Entity
{
public virtual int Id { get; set; }
public virtual CustomThing CustomThing { get; set; }
}
class CustomThing
{
public string Id { get; set; }
public string Name { get; set; }
}
私はマッピングを定義するCustomMap
を使用しようとしている:
class EntityMap : ClassMap<Entity>
{
public EntityMap()
{
Table("entities");
Id(e => e.Id, "id").GeneratedBy.Assigned();
// Map(e => e.CustomThing, "custom_thing");
}
}
を質問です:どのように私はCustomThingをマッピングすることができますか? Entityクラス(PostgreSQLデータベースに対して実行する場合はFluentNHibernateパッケージとNpgSQLが必要)をマップしようとするプログラムです。
class Program
{
// How to use this in mapping?
static CustomThing[] _customThings =
{
new CustomThing {Id = "abc", Name = "ABC"},
new CustomThing {Id = "def", Name = "DEF"}
};
static void Main()
{
using (ISessionFactory sessionFactory = Fluently.Configure()
.Database(PostgreSQLConfiguration.Standard
.ConnectionString(
@"Server=localhost; Database=test_nhibernate; User Id=postgres; Password=little_secret;"))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
.BuildSessionFactory())
{
using (ISession session = sessionFactory.OpenSession())
{
var entity = session.Get<Entity>(1);
Console.WriteLine($"{entity?.Id} {entity?.CustomThing?.Name}");
}
}
Console.ReadLine();
}
}
CustomThing
のマッピングが定義されていないため、出力はもちろんのみIdプロパティの値です。簡単にするために私はコード内のCustomThing
のインスタンスを作成します私はそれにパラメータを渡すことができるようにマッピングを設定することができますcustom_thing
の列の値を_customThings
のオブジェクトに何らかの方法でIdプロパティでマップできますか?
私はJSONテキストとして、このプロパティを格納し、オブジェクトをシリアル化および逆シリアル化するために、新しいカスタム「のUserType」を作成すると、同じ問題を解決し、私はいくつかのコードスニペットを提供することができますか? – mdameer
@mdameerありがとうございます、私はその点を理解していると思いますが、マッパーにそのJSONをどのように割り当てるよう指示しましたか? 'Entity.CustomThing'はここでは' string'型であると仮定します。問題は、 'entities'テーブルでは、シリアル化された' CustomThing'全体を格納するのではなく、 'Id'だけを格納することです。他のプロパティは、CustomThing JSON構造全体を持つ外部サービスから来ます。その場合、あなたのソリューションは機能しますか? – Caleb9