मेरे पास निम्न कोड है:

using (AtlasEntities dbContext = new AtlasEntities())
{
    List<SqlParameter> parameters = new List<SqlParameter>();
    parameters.Add(new SqlParameter("today", today));

    var results = dbContext
        .MultipleResults($"EXEC [dbo].[GetPolicyPremiums] @today, parameters)
        .AddResult<PremiumDueReminderEntity>()
        .AddResult<PremiumDueReminderEntity>()
        .AddResult<PremiumDueReminderEntity>()
        .AddResult<PremiumDueReminderEntity>()
        .Execute();
/**/
    Mail mail = new Mail()
                    {
                        IsMailSent = false,
                        ErrorFailureCount = 0,
                        Body = "Body",
                        Subject = "Premium Due Reminder"
                    };
    dbContext.Mails.Add(mail);
    dbContext.SaveChanges();
}

AtlasEntities EntityModel नाम के एक अलग प्रोजेक्ट से है जो EDMX के साथ Entity Framework का उपयोग करके मेरी डेटा परत के रूप में कार्य करता है।

.Execute() पूरी तरह से ठीक काम करता है और मैं डेटाबेस से आवश्यक results प्राप्त करने में सक्षम हूं।

हालांकि जब मैं dbContext.SaveChanges() कोड चलाता हूं, तो मुझे निम्न स्टैक ट्रेस मिलता है:

at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction)
at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass2a.<SaveChangesInternal>b__27()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction)
at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options)
at System.Data.Entity.Internal.InternalContext.SaveChanges()
at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
at System.Data.Entity.DbContext.SaveChanges()
at NotificationApp.PremiumNotificationManager.StartCheck() in C:\Projects\LIVE\NotificationApp\Manager\PremiumNotificationManager.cs:line 71

संदेश है:

आधारभूत प्रदाता खोलने पर विफल रहा

आंतरिक अपवाद है:

संपर्कस्ट्रिंग विशेषता प्रारंभ नहीं की गई है

मैं इस परियोजना में कहीं भी SqlConnection का उपयोग नहीं कर रहा हूं।

दोनों प्रोजेक्ट अपनी संबंधित App.config फाइलों में एक समान कनेक्शन स्ट्रिंग का उपयोग कर रहे हैं:

<connectionStrings>
    <add name="AtlasEntities" 
         connectionString="metadata=res://*/Data.AtlasModel.csdl|res://*/Data.AtlasModel.ssdl|res://*/Data.AtlasModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=NAB-SHARMAB\SQLSERVER2019;initial catalog=Live_DB;persist security info=True;user id=AdminTest;password=PasswordTest;multipleactiveresultsets=True;application name=EntityFramework&quot;" 
          providerName="System.Data.EntityClient" />
</connectionStrings>`

मुझे इस प्रकार की त्रुटि वाले किसी और को नहीं मिला है और मुझे नहीं पता कि इसका क्या कारण है। कृपया मदद करे।

0
user3162879 19 सितंबर 2020, 22:21

2 जवाब

सबसे बढ़िया उत्तर

मैंने बचत भाग को दूसरी विधि में ले जाकर हल किया:

private static void SaveMail(string emailBody)
        {
            using (AtlasEntities dbContext = new AtlasEntities())
            {
                Mail mail = new Mail()
                {
                    IsMailSent = false,
                    ErrorFailureCount = 0,
                    Body = emailBody,
                    Subject = "Premium Due Reminder"
                };
                dbContext.Mails.Add(mail);
                dbContext.SaveChanges();
        }

यह जानना अभी भी सहायक होगा कि जब मैं एक और Context बनाता हूं तो मुझे यह त्रुटि क्यों नहीं मिलती है। मुझे यकीन नहीं है कि यह अब क्यों काम करता है।

0
user3162879 20 सितंबर 2020, 10:25

मेल की एक खाली सूची घोषित करें और आरंभ करें

List<Mail> mails = new List<Mail>();

फिर बदलें

dbContext.Mails.Add(mail);

सरलता से

mails.Add(mail);
-1
TropicalViking 19 सितंबर 2020, 23:03