FluentNhibernate Пользовательский первичный ключ Automapping - (dis) разрешить нули - PullRequest
0 голосов
/ 06 марта 2012

Если это способ для жестко запрограммированного отображения полей базы данных, которые могут быть обнуляемыми и не обнуляемыми

// 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 не должен быть здесь вопросом, так как клиентский код не должен заботиться о том, как его назначает база данных.

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

В конце концов, решение заключается в реализации интерфейса IIdConvention.Я добавляю некоторый код на случай, если кто-то сочтет это полезным.

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

Он может даже использоваться с пользовательским классом для генерации идентификатора

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
    }
}
0 голосов
/ 07 марта 2012

Настройка ответственности за генерацию первичного ключа для базы данных с использованием свободного nhibernate не решает вашу проблему?

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

        Map(x => x.Name).Nullable();
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...