Свободный NHibernate создает таблицы с моим именем пользователя в качестве префикса - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в nhibernet и пытался создать тест-программу.Поэтому я создал сущности и файлы сопоставления для Fluent NHibernate, как описано здесь: https://github.com/FluentNHibernate/fluent-nhibernate/wiki/Getting-started

Сущность:

namespace NHibernateDemoApp
{
    public class Employee
    {
        public virtual int Id { get; protected set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
    }
}

Карта:

class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        Id(x => x.Id);
        Map(x => x.FirstName);
        Map(x => x.LastName);
    }
}   

Затем я использовал их какэто:

private static ISessionFactory CreateFluidSessionFactory()
{
    return Fluently.Configure()
      .Database(MsSqlConfiguration.MsSql2012.ConnectionString("Data Source=mydatabase;Initial Catalog=mydatabase;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False")
      )
      .Mappings(m =>
        m.FluentMappings.AddFromAssemblyOf<Program>())
       .ExposeConfiguration(BuildSchema)
      .BuildSessionFactory();
}

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

Все выглядит хорошо, но NHibernet создал таблицу с моим именем пользователя в качестве префикса.Итак, создание таблицы выглядит следующим образом:

CREATE TABLE [MyDomain\MyUsername].[Employee](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [FirstName] [nvarchar](255) NULL,
    [LastName] [nvarchar](255) NULL,
PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

, но оно должно быть создано следующим образом:

CREATE TABLE [MyDatabase].[Employee](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [FirstName] [nvarchar](255) NULL,
    [LastName] [nvarchar](255) NULL,
PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Когда я запускаю свою тестовую программу как другой пользователь, таблица создается дважды (по одному на каждого пользователя).

Что я делаю не так?Как сказать hibernet, что в таблице не должно быть имени пользователя.

1 Ответ

0 голосов
/ 12 октября 2018

Вам необходимо изменить схему по умолчанию.Это настройка конфигурации NH.Убедитесь, что у вас есть разрешение базы данных для создания таблиц в схеме dbo.

Вы должны иметь возможность сделать что-то вроде:

return 
    Fluently.Configure()
        .Database(
            MsSqlConfiguration.MsSql2012
                .ConnectionString("Data Source=mydatabase;Initial Catalog=mydatabase;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFai9lover=False")
                .DefaultSchema("dbo"))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>())
        .ExposeConfiguration(BuildSchema)
        .BuildSessionFactory();

Опция зависает от типа конфигурации: https://github.com/FluentNHibernate/fluent-nhibernate/wiki/Database-configuration

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...