2012-08-07 21 views
15

Jeśli korzystasz z modelu danych obiektu contex (z plikiem EDMX), podczas jego tworzenia możesz chcieć określić ciąg połączenia w pliku konfiguracyjnym.Ciąg połączenia dostawcy z Entity Framework

Ciąg połączenia nie jest niestety typowym ciągiem połączenia, ponieważ zawiera pewne ... rzeczy potrzebne dla połączeń jednostek. Przykład z połączenia MySQL:

<add name="MyDbEntities" connectionString="metadata=res://*/Namespace.MyDb.csdl|res://*/Namespace.MyDb.ssdl|res://*/Namespace.MyDb.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=172.17.17.154;User Id=user;password=password;Persist Security Info=True;database=MyDatabase;Convert Zero Datetime=true&quot;" providerName="System.Data.EntityClient" /> 

Mam problem jest to, że ten ciąg połączenia zawiera ciąg połączenia dostawcy w „ciąg połączenia usługodawca” parametr.

Z konkretnego powodu potrzebuję utworzyć nowy MySqlConnection, niezwiązany z modelem encji. Do tworzenia MySqlConnection, muszę podać mu ciąg połączenia mysql - który jest ciągiem połączenia dostawcy dla modelu encji i wiem, że ciąg połączenia, jakiego potrzebuję, jest zawsze tym samym ciągiem połączenia dla modelu encji.

Ale jak programowo uzyskać ciąg połączenia z dostawcą? Utknąłem z przeglądania instancji modelu bez powodzenia ...

Poniższy:

ModelInstance.Connection.ConnectionString 

zawiera coś w rodzaju „name = TestBotEntities”, nawet nie cały ciąg połączenia. Tak próbowałem:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString 

ale jeden zawiera cały ciąg połączenia podmiot, a ja po prostu nie wiem, jak je analizować, w jaki sposób dostać tylko ciąg połączenia dostawcą od niego.

Odpowiedz

33

Okazuje się, że istnieją dwa sposoby.

mogłem analizować ciąg połączenia podmiot poprzez EntityConnectionStringBuilder:

string entityConnectionString = ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString; 
string providerConnectionString = new EntityConnectionStringBuilder(entityConnectionString).ProviderConnectionString; 

... czy mam konkretną instancję modelu dostępne, mogę go stąd.

((System.Data.EntityClient.EntityConnection)ModelInstance.Connection).StoreConnection.ConnectionString;