Question

If this is the way for hard-coded mapping for nullable and not nullable database fields

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

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

How is it done with automapping and conventions?

Also, it is not obvious but the purpose that I need it for is to have nhibernate generate insert sql statements without using a primary key field.

Example: if I want database to generate ProductId, instead of

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

NHibernate should generate

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

And, rdbms should not be a question here, as a client code should not care how database assigns it.

Était-ce utile?

La solution

After all, solution is in implementing IIdConvention interface. I'm adding some code in case someone find this useful.

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

It can even be used with custom class for generating 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
    }
}

Autres conseils

Setting the responsability to generate the primary key to database, using fluent nhibernate doesnt solve your problem ?

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

        Map(x => x.Name).Nullable();
        ...
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top