0

FluentNhibernate 1.3.0.733 NHibernate 3.3.1.4000 を使用して、ルックアップ テーブルを列挙型にマップしようとしています。

オブジェクトをロードできません。列挙マッピングを削除すると、オブジェクトをロードできます。

コード:

Order order = session.Get<Order>(id);

エラー: 間違ったタイプの ID が提供されました。予想: Order+OrderStatus、System.Int32 を取得

物体:

public class Order
{
    public enum OrderStatus
    {
        PaymentPending = 0
    }

    public virtual int Id { get; set; }
    public virtual Customer Customer { get; set; }
    public virtual Address Address { get; set; }
    public virtual IList<OrderLine> OrderLines { get; set; }
    public virtual OrderStatus Status { get; set; }
    public virtual DateTime Created { get; set; }

    public Order()
    {
        OrderLines = new List<OrderLine>();
    }
}

マッピング: (テストのためにこれらのフィールドにマッピングを切り詰めました)

public OrderMapping()
{
    Table("orders");
    Id(x => x.Id);
    Id(x => x.Status, "state_id").CustomType<Order.OrderStatus>().Not.Nullable();
    References(x => x.Address).Cascade.All().Column("address_id");
    References(x => x.Customer).Cascade.All().Column("customer_id");
}

テーブル:

CREATE TABLE [order_states] (
    [id] INTEGER  NOT NULL PRIMARY KEY,
    [state] NVARCHAR(50)  NOT NULL
);

CREATE TABLE [orders] (
    [id] INTEGER  NOT NULL PRIMARY KEY,
    [customer_id] INTEGER  NOT NULL,
    [address_id] INTEGER  NOT NULL,
    [state_id] INTEGER  NOT NULL,
    [created] DATE,

    FOREIGN KEY(customer_id) REFERENCES customers(id),
    FOREIGN KEY(address_id) REFERENCES addresses(id),
    FOREIGN KEY(state_id) REFERENCES order_states(id)
);

私は何を間違っていますか?

4

1 に答える 1

0

ばかげたエラーが原因です。プロパティとしてではなく、IDとしてマップされたステータスがありました。

正しいマッピング:

public OrderMapping()
        {
            Table("orders");
            Id(x => x.Id);
            Map(x => x.Status, "state_id").CustomType<Order.OrderStatus>().Not.Nullable();
            References(x => x.Address).Cascade.All().Column("address_id");
            References(x => x.Customer).Cascade.All().Column("customer_id");
        }
于 2013-01-09T11:29:24.303 に答える