0

Fluent NHibernate を使用して Identity クラスから Id をマップしようとしています。

ID クラス:

public interface IValueObject<T> {
    bool SameValueAs(T other);
}

[Serializable]
public class Identity<TEntity> : IValueObject<Identity<TEntity>> {

    public long Id { get; protected set; }

    public Identity(long id) {
        this.Id = id;
    }

    protected Identity() { }

    public bool SameValueAs(Identity<TEntity> other) {
        return other != null && this.Id == other.Id;
    }
}

モデル:

public interface IEntity<T> {
    Identity<T> Identity { get; }
    bool SameIdentityAs(T other);
}

public class Employee: IEntity<Employee> {
    public virtual Identity<Employee> Identity { get; set; }
    public virtual string Name { get; set; }
}

この従業員をどのようにマッピングできますか? この方法は機能しません。SessionFactory の構築時に次の例外が発生します: クラス 'Employee' のプロパティ 'Id' のゲッターが見つかりませんでした

public class EmployeeMap : ClassMap<Employee> {

    public EmployeeMap() {
        Id(x => x.Identity.Id).GeneratedBy.Native();
        Map(x => x.Name);
    }
}
4

1 に答える 1

0

あなたがやろうとしていることはサポートされていません。

より長い説明がありますが、特に DB で生成された ID を使用する場合は、ラップされていないネイティブの int または long を使用する必要があります。

つまり、id をエンティティのプライベート フィールドとしてマップし、ラッパーで公開することができます。これはまだ LINQ クエリでは機能しないため、価値は限られています。

于 2012-08-17T14:07:15.147 に答える