FluentNhibernate не создает столбец Id в качестве идентификатора с SQL CE 4.0 - PullRequest
2 голосов
/ 07 ноября 2011

Я пытаюсь создать некоторые интеграционные тесты без внешних зависимостей базы данных, поэтому использую SQL CE 4.0 и пытаюсь настроить его с помощью FluentNhibernate.

Я дошел до того, что тесты создают файл базы данных каждый раз, когда он запускается, а затем создают таблицу, которую я хочу использовать, но она никогда не устанавливает для столбца Id значение и спецификацию идентификатора. Когда я тогда пытаюсь вставить в таблицу с Nhibernate, он жалуется на пустой столбец идентичности.

Это моя картографическая защита и класс данных:

public class AffiliateApplicationRecord
{
    public virtual int Id { get; private set; }
    public virtual string CompanyName { get; set; }
    public virtual string Email { get; set; }
    public virtual string DomainName { get; set; }
    public virtual DateTime DateReceived { get; set; }

    public AffiliateApplicationRecord()
    {
        DateReceived = DateTime.Now;
    }
}

public class AffiliateApplicationRecordMap : ClassMap<AffiliateApplicationRecord>
{
    public AffiliateApplicationRecordMap()
    {
        Table("Partner");
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.CompanyName, "Name");
        Map(x => x.DomainName, "Domain");
        Map(x => x.Email);
        Map(x => x.DateReceived, "TimeStampCreated");
    }
}

И это методы, которые настраивают фабрику сеансов, которую я вызываю в своих репозиториях, чтобы заставить фабрику сеансов выполнять запросы / вставлять данные.

РЕДАКТИРОВАТЬ: добавлена ​​настройка диалекта ...

private ISessionFactory CreateSessionFactory()
    {

        var config = Fluently.Configure()
            .Database(
                MsSqlCeConfiguration.Standard
                    .Dialect<MsSqlCe40Dialect>()
                    .ConnectionString("Data Source=DatabaseFileName.sdf"))
            .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(AffiliateApplicationRecord).Assembly))
            .ExposeConfiguration(BuildSchema)
            .BuildConfiguration()

        return config.BuildSessionFactory();
    }

    private static void BuildSchema(Configuration config)
    {
        new SchemaExport(config).Create(false, true);
    }

Я бы очень признателен за помощь в этом. Меня беспокоит, что либо Fluent не сделает этого для меня, либо SQL CE не будет работать.

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

После использования набора инструментов SQLCe я понял, что таблица создавалась правильно со столбцом идентификаторов и что проблема, которую я видел (AssertionFailure: «нулевой идентификатор»), была фактически вызвана ошибкой в ​​SQL CE, описанной здесь ...

AssertionFailure: «нулевой идентификатор» - FluentNH + SQLServerCE

Большое спасибо SO

0 голосов
/ 07 ноября 2011

попробуйте использовать MsSqlCe40Dialect вместо MsSqlCeDialect.

...