0

これがnull許容およびnull許容でないデータベースフィールドのハードコーディングされたマッピングの方法である場合

// nullable
Map(x => x.FirstName)
  .Nullable();

// not nullable
Map(x => x.FirstName)
  .Not.Nullable();

自動マッピングと規則でどのように行われますか?

また、それは明らかではありませんが、私がそれを必要とする目的は、主キーフィールドを使用せずにnhibernateに挿入SQLステートメントを生成させることです。

例:データベースでProductIdを生成するのではなく、

insert into Product (ProductId, Name) values (1, 'product name');

NHibernateは生成する必要があります

insert into Product (Name) values ('product name');

また、rdbmsは、データベースがどのように割り当てるかをクライアントコードが気にしないため、ここでは問題になりません。

4

2 に答える 2

2

結局のところ、解決策はIIdConventionインターフェースを実装することです。誰かがこれが役に立つと思う場合に備えて、私はいくつかのコードを追加しています。

public class PrimaryKeyConvention : IIdConvention
{
    public void Apply(IIdentityInstance instance)
    {            
        instance.Column(instance.EntityType.Name + "Id");
        instance.GeneratedBy.Native();
    }
}

IDを生成するためのカスタムクラスで使用することもできます

public class PrimaryKeyConvention : FluentNHibernate.Conventions.IIdConvention
{
    public void Apply(IIdentityInstance instance)
    {            
        instance.Column(instance.EntityType.Name + "Id");
        instance.GeneratedBy.Custom(typeof(CustomIdGenerator));
    }
}
public class CustomIdGenerator : NHibernate.Id.IIdentifierGenerator
{

    public object Generate(NHibernate.Engine.ISessionImplementor session, object obj)
    {
        return null; //this should be custom implemented
    }
}
于 2012-03-13T21:25:05.660 に答える
0

流暢な nhibernate を使用してデータベースへの主キーを生成する責任を設定しても問題は解決しませんか?

public class ProductMap : ClassMap<Product>
{
    public ProductMap()
    {
        Id(x => x.Id).GeneratedBy.Native();

        Map(x => x.Name).Nullable();
        ...
    }
}
于 2012-03-07T12:22:31.393 に答える