2010-07-10 17 views
6

मैंने हाल ही में कुछ परियोजनाओं के लिए ईएफ v4 कोड केवल लाइब्रेरी का उपयोग करना शुरू कर दिया है जिन पर मैं काम कर रहा हूं। हालांकि, मैं एक झटके में भाग गया है। मैं कनेक्शन स्ट्रिंग के लिए उचित प्रारूप को समझने के लिए प्रतीत नहीं कर सकता। मैं कनेक्शन स्ट्रिंग का निर्माण करने के लिए निम्न कोड का इस्तेमाल किया है:इकाई फ्रेमवर्क v4 कोड-केवल कनेक्शन स्ट्रिंग

string connectionString = new EntityConnectionStringBuilder 
{ 
    Provider = "System.Data.SqlClient", 
    ProviderConnectionString = new SqlConnectionStringBuilder 
    { 
     DataSource = "localhost", 
     InitialCatalog = "ASM_Testing", 
     IntegratedSecurity = true, 
     Pooling = false 
    }.ConnectionString 
}.ConnectionString; 

हालांकि, यह निम्न त्रुटि में परिणाम का उपयोग कर:

Specifications_for_EntityContext.When_logging_in_application_with_valid_app_role_and_password.Login_should_be_successful : System.ArgumentException : Some required information is missing from the connection string. The 'metadata' keyword is always required. 
Stack Trace: 
    at System.Data.EntityClient.EntityConnection.ValidateValueForTheKeyword(DbConnectionOptions effectiveConnectionOptions, String keywordName) 
    at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) 
    at System.Data.Objects.ObjectContext..ctor(String connectionString) 
    at ASM.Data.EntityContext..ctor(String connectionString) in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\ASM.Data\EntityContext.cs:line 16 
    at Specifications_for_EntityContext.Behaves_like_EntityContext_connected_to_a_database.TestableEntityContext..ctor(String connectionString) in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\Tests.ASM.Data\EntityContextFacts.cs:line 165 
    at Specifications_for_EntityContext.Behaves_like_EntityContext_connected_to_a_database.InitializeContext() in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\Tests.ASM.Data\EntityContextFacts.cs`e`enter code here`nter code here`:line 160 
    at ASM.Testing.xUnit.ObservationCommand.Execute(Object testClass) in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\ASM.Testing.xUnit\ObservationCommand.cs:line 24 
    at Xunit.Sdk.FixtureCommand.Execute(Object testClass) 
    at Xunit.Sdk.BeforeAfterCommand.Execute(Object testClass) 
    at Xunit.Sdk.LifetimeCommand.Execute(Object testClass) 
    at Xunit.Sdk.TimedCommand.Execute(Object testClass) 
    at Xunit.Sdk.ExceptionAndOutputCaptureCommand.Execute(Object testClass) 

देखकर के रूप में मैं के बाद से मैं किसी भी मेटाडाटा ... की जरूरत नहीं है केवल कोड का उपयोग कर रहा हूँ, मैं थोड़ी सी बांध में हूं। किसी भी जानकारी की काफी सरहना की जाएगी।

इस प्रकार कनेक्शन बिल्डर वर्गों द्वारा उत्पन्न स्ट्रिंग है:

provider=System.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=ASM_Testing;Integrated Security=True;Pooling=False"


कार्य उदाहरण (स्वीकार किए जाते हैं जवाब के आधार पर)

यह ContextBuilder उपयोग करने के लिए किसी भी बनाने के लिए आवश्यक है एक संदर्भ का उदाहरण जो कोड-केवल मोड का उपयोग करता है। यहाँ जो लोग एक ही समस्या का उत्तर खोज रहे हैं के लिए इस की एक काम उदाहरण है:

protected override void InitializeContext() 
{ 
    string connectionString = new SqlConnectionStringBuilder 
    { 
     DataSource = "localhost", 
     InitialCatalog = "Testing", 
     IntegratedSecurity = true, 
     Pooling = false 
    }.ConnectionString; 

    var connection = new SqlConnection(connectionString); 
    var builder = new ContextBuilder<TestableEntityContext>(); 
    m_context = builder.Create(connection); 
} 
+0

आप जिसके परिणामस्वरूप स्ट्रिंग पोस्ट कर सकते हैं? या यह कोड निष्पादित करते समय पहले ही उड़ा है? –

+0

@ हेंक: कनेक्शन स्ट्रिंग जोड़ा गया। – jrista

उत्तर

4

इसका इस्तेमाल करने के लिए:

var builder = new ContextBuilder<YourContext>(); 

using (YourContext context = builder.Create(new SqlConnection(ConfigurationManager.ConnectionStrings["yourConenctionKeyInWebConfig"].ConnectionString))) 
{ 
    ... 
} 
+0

धन्यवाद। मैं ContextBuilder के बारे में जानता था, लेकिन यह मेरे एंटिटी कॉन्टेक्स्ट क्लास के लिए मेरे यूनिट परीक्षणों में इसका उपयोग करने के लिए मेरे दिमाग को पार नहीं कर पाया। मुझे लगता है कि यह समस्या को हल करेगा हालांकि। धन्यवाद! – jrista

3

जहां तक ​​मेरा कोड का उपयोग कर समझ ही दृष्टिकोण आप बस करने के लिए डीबी कनेक्शन स्ट्रिंग पारित करके संदर्भ का दृष्टांत नहीं कर सकते हैं अपने ctor। आम तौर पर आप अपना संदर्भ बनाने के लिए ContextBuilder का उपयोग करेंगे।

  1. ctor परिभाषित EntityContext कक्षा में EntityConnection लेने

    सार्वजनिक EntityContext (EntityConnection कनेक्शन): आधार (कनेक्शन) { }

  2. कनेक्शन

    वर कारखाने बनाएं = DbProviderFactories.GetFactory ("System.Data.SqlClient"); var कनेक्शन = factory.CreateConnection(); कनेक्शन। कनेक्शन कनेक्शन = प्रदाता कनेक्शन कनेक्शन;

  3. उपयोग ContextBuilder नई संदर्भ

    वर contextBuilder = नए ContextBuilder बनाने के लिए(); संदर्भबिल्डर। कॉन्फ़िगरेशन। जोड़ें (...) var संदर्भ = संदर्भबिल्डर। बनाएं (कनेक्शन);

+0

+1 ग्रेट उत्तर। मैंने Gregoire के पहले पढ़ा, और इसे स्वीकार के रूप में चिह्नित किया। हालांकि, दोनों ने मेरे प्रश्न का उत्तर दिया, हालांकि। धन्यवाद! – jrista

संबंधित मुद्दे