2009-11-15 19 views
7

Mam pole varbinary w mojej bazy danych serwera sql, który musi być varbinary (max). Tworzę bazę danych za pomocą NHibernate i używam Fluent Nhibernate do moich mapowań.Fluent NHibernate, varbinary (max) i SQLite

Używam również SQLite do moich testów jednostkowych, używam tych samych mapowań, po prostu zmieniam konfigurację przed utworzeniem bazy danych w pamięci.

Otrzymuję następujący problem.

I stworzył tę metodę rozszerzenia:

public static IProperty WithMaxVarBinaryLength(this IProperty propertyMap) 
{ 
    return propertyMap.CustomSqlTypeIs("varbinary(max)"); 
} 

Działa dobrze na mojej stronie internetowej, baza danych jest tworzona z varbinary (max) pola, ale gdy uruchomię moich testów jednostkowych otrzymuję następujący wyjątek

System.Data.SQLite.SQLiteException: SQLite error near "max": syntax error 

Potem znalazłem w innym pytanie na stackoverflow, że możemy to zrobić, aby stworzyć varbinary (max):

public static IProperty WithMaxLength(this IProperty propertyMap) 
{ 
    return propertyMap.WithLengthOf(1000); 
} 

Ale otrzymuję ten wyjątek:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Content is not a string. at FluentNHibernate.Mapping.PropertyMap.WithLengthOf(Int32 length) in d:\Builds\FluentNH\src\FluentNHibernate\Mapping\PropertyMap.cs:line 166 

w tej chwili jestem z pomysłem, nie chcę, aby utworzyć ręcznie wszystkie moje skrypty bazy danych i chcę kontynuować używanie SQLite dla moich testów jednostkowych.

Dzięki za pomoc.

Nawiasem mówiąc, oto moje pełne mapowanie, zauważ że użyłem moich metod rozszerzenia.

public class AttachmentFileMap : ClassMap<AttachmentFile> 
{ 
    public AttachmentFileMap() 
    { 
     WithTable("AttachmentFiles"); 

     Id(x => x.Id).GeneratedBy.Identity(); 
     Map(x => x.Content).WithMaxVarBinaryLength(); 
     Map(x => x.ContentType); 
     Map(x => x.FileName); 
     Map(x => x.ContentLength); 
    } 
} 

Treść bajt []

Charles

Odpowiedz

4

W końcu okazało się, że nowa wersja Fluent NHibernate rozwiązuje ten problem, można teraz używać .length() po właściwość bajt [] typ i działa idealnie.

Musiałem również zaktualizować moją bibliotekę Nhibernate i zmienić kod w moich klasach odwzorowań, ponieważ nowa wersja Fluent Nhibernate zmieniła nazwę niektórych metod w nowej wersji.

Powiązane problemy