2011-06-09 18 views
9

Utworzono usługę REST WCF, która używa nhibernate do łączenia z bazą danych kompaktowej edycji serwera sql. Stąd skonfigurować DataSource NHibernate jak:ścieżka względna dla pliku bazy danych w pliku konfiguracyjnym

<property name="connection.connection_string">Data Source=[Path]\MyDb.sdf</property> 

przykrości używam do teraz jest to, że nie mogę dowiedzieć się, jak uniknąć pisać bezwzględną ścieżkę w config. Jest to denerwujące, ponieważ przechowuję plik bazy danych jako część projektu w folderze App_Data. Nie powinienem więc aktualizować ścieżki, np. kiedy wdrażam projekt w inne miejsce, nawet jeśli ścieżka bezwzględna jest inna.

Korzystając z programu procmon, zauważyłem, że jeśli nie piszę absolutnej poprawki w konfiguracji źródła danych, jest ono interpretowane jako względne względem ścieżki: * C: \ Program Files (x86) \ Wspólne pliki \ Microsoft Shared \ DevServer \ 10.0 *.

Czy możliwe jest założenie nhibernate, że chcemy powiązać ścieżkę z folderem bin aplikacji (gdzie kończy się moja App_Data/MyDb.sdf)?

Odpowiedz

17

Należy użyć:

Data Source=|DataDirectory|\MyDb.sdf 

|DataDirectory| punkty do folderu App_Data.

+3

Po prostu dla każdego, możesz użyć tego do wygenerowania innych krewnych, np .: '| DataDirectory \ \ \ bin \ File.sdf'. Gdybym tylko mógł głosować więcej, dzięki, doskonale. Czy znasz jakieś inne słowa kluczowe, które obsługuje ciąg połączenia lub czy to tylko jeden? –

+0

Warto zauważyć, że wskazówka Paula powyżej działa, pomimo tego, co zostało powiedziane na innych stanowiskach SO. – marc

+0

Tak, link do odnośnika, w którym zostałyby zakryte definicje słów kluczowych, byłby wspaniały ... (cytuj, że pracujesz) – FizxMike

1

Czy istnieje jakiś powód, dla którego masz konfigurację NHibernate w pliku XML zamiast budować konfigurację programowo za pomocą interfejsu konfiguracyjnego NHibernate?

Jeśli masz możliwość, to jak zrobiłbym to:

var path = // dynamically generate your path 
var configuration = new Configuration(); 
configuration.SetProperty(Environment.ConnectionString, String.Format("Data Source={0};", path)); 
... // other configuration properties 

wszystkich klas potrzebne są pod nazw NHibernate.Cfg. Jest również Fluent NHibernate, który zapewnia znacznie bardziej przejrzysty interfejs do budowania konfiguracji.

Nadzieję, że pomaga!

Powiązane problemy