Свободная спецификация NHibernate, SQL Server и длины строки не работает должным образом - PullRequest
0 голосов
/ 31 октября 2011

Я следую учебникам Summer of NHibernate, но я не использую сопоставления xml, но вместо этого я использую Fluent NHibernate для выполнения сопоставлений.

Мой класс сущности «Мой клиент»:

public class Customer
{
    public virtual int CustomerId { get; set; }

    public virtual string Firstname { get; set; }

    public virtual string Lastname { get; set; }   
}

Соответствующий класс сопоставления:

public class CustomerMap: ClassMap<Customer>
{
    public CustomerMap()
    {
        Id(x =>x.CustomerId);
        Map(x => x.Firstname).Length(50).Nullable();
        Map(x => x.Lastname).Length(50).Nullable();
        ImportType<CustomerFirstnameCounter>();
    }

}

Мой класс DAO:

 public int AddCustomer( Customer customer )
    {

        using( ISession session = GetSession() )
        {
            using( ITransaction tx = session.BeginTransaction() )
            {
                try
                {
                    int newId = ( int ) session.Save( customer );
                    session.Flush();
                    tx.Commit();
                    return newId;
                }
                catch( GenericADOException )
                {
                    tx.Rollback();
                    throw;
                }
            }
        }

    }

И наконец, мой тест:

 [Test]
 public void AddCustomerThrowsExceptionOnFail()
 {
       // Arrange
       Customer customer = BuildInvalidCustomer();

       // Act
       _provider.AddCustomer( customer );

       // Assert

 }

Когда тест выполняется, исключение не выдается!Итак, мой первый вопрос: может ли кто-нибудь увидеть, что не так с моим отображением.

Теперь в дБ поле «Имя» устанавливается как varchar (50).Когда я отлаживаю тест, я вижу, что данные вставлены, но усечены (я получаю предупреждающие сообщения).Так что это может указывать
, что я не настроил дБ должным образом.Может ли кто-нибудь указать мне, где предотвратить это усечение данных в SQL Server?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Этот ответ должен вам помочь. Я также буду использовать аннотацию данных StringLengthAttribute для проверки ваших свойств

0 голосов
/ 31 октября 2011

.Length(50) не проверяет длины во время выполнения.Это используется только в том случае, если вы генерируете схему базы данных из сопоставлений.

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

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