ইতিমধ্যে এই কমান্ডের সাথে সম্পর্কিত একটি ওপেন ডেটা রিডার রয়েছে যা প্রথমে বন্ধ করতে হবে


640

আমার এই প্রশ্নটি রয়েছে এবং আমি এই ফাংশনটিতে ত্রুটি পেয়েছি:

var accounts = from account in context.Accounts
               from guranteer in account.Gurantors
               select new AccountsReport
               {
                   CreditRegistryId = account.CreditRegistryId,
                   AccountNumber = account.AccountNo,
                   DateOpened = account.DateOpened,
               };

 return accounts.AsEnumerable()
                .Select((account, index) => new AccountsReport()
                    {
                        RecordNumber = FormattedRowNumber(account, index + 1),
                        CreditRegistryId = account.CreditRegistryId,
                        DateLastUpdated = DateLastUpdated(account.CreditRegistryId, account.AccountNumber),
                        AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber)
                    })
                .OrderBy(c=>c.FormattedRecordNumber)
                .ThenByDescending(c => c.StateChangeDate);


public DateTime DateLastUpdated(long creditorRegistryId, string accountNo)
{
    return (from h in context.AccountHistory
            where h.CreditorRegistryId == creditorRegistryId && h.AccountNo == accountNo
            select h.LastUpdated).Max();
}

ত্রুটিটি হ'ল:

ইতিমধ্যে এই কমান্ডের সাথে সম্পর্কিত একটি ওপেন ডেটা রিডার রয়েছে যা প্রথমে বন্ধ করতে হবে।

হালনাগাদ:

স্ট্যাক ট্রেস যোগ করা হয়েছে:

InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.]
   System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) +5008639
   System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +23
   System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +144
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +87
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141
   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12
   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +443

[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
   System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +479
   System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +683
   System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +119
   System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +38
   System.Linq.Enumerable.Single(IEnumerable`1 source) +114
   System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3(IEnumerable`1 sequence) +4
   System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +29
   System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +91
   System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(Expression expression) +69
   System.Linq.Queryable.Max(IQueryable`1 source) +216
   CreditRegistry.Repositories.CreditRegistryRepository.DateLastUpdated(Int64 creditorRegistryId, String accountNo) in D:\Freelance Work\SuperExpert\CreditRegistry\CreditRegistry\Repositories\CreditRegistryRepository.cs:1497
   CreditRegistry.Repositories.CreditRegistryRepository.<AccountDetails>b__88(AccountsReport account, Int32 index) in D:\Freelance Work\SuperExpert\CreditRegistry\CreditRegistry\Repositories\CreditRegistryRepository.cs:1250
   System.Linq.<SelectIterator>d__7`2.MoveNext() +198
   System.Linq.Buffer`1..ctor(IEnumerable`1 source) +217
   System.Linq.<GetEnumerator>d__0.MoveNext() +96

উত্তর:


1286

অন্য কোয়েরি থেকে ফলাফলগুলি পুনরাবৃত্তি করার সময় আপনি যদি কোনও কোয়েরি কার্যকর করেন তবে এটি ঘটতে পারে। এটি কোথায় ঘটে তা আপনার উদাহরণ থেকে পরিষ্কার নয় কারণ উদাহরণটি সম্পূর্ণ না is

এটির কারণ হতে পারে এমন একটি জিনিস যখন কিছু ক্যোয়ারীর ফলাফলগুলির পুনরাবৃত্তি ঘটে তখন অলস লোড ট্রিগার হয়।

আপনার সংযোগের স্ট্রিংয়ে মার্সকে অনুমতি দিয়ে এটি সহজে সমাধান করা যেতে পারে। যোগ MultipleActiveResultSets=trueআপনার সংযোগ স্ট্রিং (যেখানে ডাটা উৎস, প্রাথমিক ক্যাটালগ ইত্যাদি উল্লিখিত) এর প্রদানকারী অংশ।


34
এটি আমার পক্ষে কাজ করেছে। আপনি একাধিক সক্রিয় ফলাফল সেটগুলি ( এমএআরএস ) সক্ষম করার বিষয়ে আরও জানতে চাইলে এমএসডিএন.ইমক্রিফটস /en-us/library/h32h3abf(v=vs.100).aspx দেখুন । মার্সের অসুবিধাগুলি পড়ার বিষয়েও
দিগন্ত কুমার

3
অ্যাকাউন্টে কর্মক্ষমতা গ্রহণ করে আপনি সিস্টেম.ডাটা.এন্টিটি অন্তর্ভুক্ত করে এবং তারপরে এই মাধ্যমিক ডেটাটি মূল কোয়েরিতে লোড হয়েছে কিনা তা নিশ্চিত করার জন্য বিবৃতি অন্তর্ভুক্ত করে এটি সমাধান করতে পারেন। আপনি যদি মার্স সক্ষম করেন তবে এই পুনরাবৃত্ত ডেটা লোডগুলি পরীক্ষা করার জন্য এটি বন্ধ করে দিলে রাউন্ড ট্রিপগুলি হ্রাস করে আপনার ডেটা প্রসেসিং কলগুলিকে গতি বাড়িয়ে তুলতে পারে।
ক্রিস মোসচিনি

70
মার্স সক্ষম করা কেবলমাত্র সমস্যা / ব্যবহারের ক্ষেত্রে খুব সামান্য সাবসেটের জন্য করা উচিত। বেশিরভাগ ক্ষেত্রেই, কলিং অ্যাপ্লিকেশনের মধ্যে বিএড কোডের কারণে প্রশ্নের মধ্যে ত্রুটিটি দেখা দিয়েছে। আরও বিশদ এখানে: devproconnections.com/de વિકાસment/…
মাইকেল কে। ক্যাম্পবেল

132
আপনার পরে .ToList () যুক্ত করুন। (অন্তর্ভুক্ত করুন)। যেখানে () সম্ভবত সমস্যার সমাধান করবে।
সেরজ সাগান

2
একটি প্রশ্নের জন্য একটি গ্লোবাল এসকিউএল সংযোগ বিস্তৃত পরিবর্তন করা হাস্যকর। সঠিক উত্তরটি নীচে টোললিস্ট হওয়া উচিত। স্থানীয়ীকৃত সমস্যার জন্য একটি স্থানীয় ফিক্স (অর্থাত্ কেবল ক্যোয়ারী পরিবর্তন করুন)!
বাইটেডেভ

218

বিবৃতি ToList()দেওয়ার আগে আপনি পদ্ধতিটি ব্যবহার করতে পারেন return

var accounts =
from account in context.Accounts
from guranteer in account.Gurantors

 select new AccountsReport
{
    CreditRegistryId = account.CreditRegistryId,
    AccountNumber = account.AccountNo,
    DateOpened = account.DateOpened,
};

 return accounts.AsEnumerable()
               .Select((account, index) => new AccountsReport()
                       {
                           RecordNumber = FormattedRowNumber(account, index + 1),
                           CreditRegistryId = account.CreditRegistryId,
                              DateLastUpdated = DateLastUpdated(account.CreditRegistryId, account.AccountNumber),
                           AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber)}).OrderBy(c=>c.FormattedRecordNumber).ThenByDescending(c => c.StateChangeDate).ToList();


 public DateTime DateLastUpdated(long creditorRegistryId, string accountNo)
    {
        var dateReported = (from h in context.AccountHistory
                            where h.CreditorRegistryId == creditorRegistryId && h.AccountNo == accountNo
                            select h.LastUpdated).Max();
        return dateReported;
    }

9
আমার এখন এতবার এই ত্রুটি হয়েছে ... এবং প্রতিবার আমি ভুলে গেছি! প্রশ্নের উত্তর সর্বদা ToList () ব্যবহার করা।
চিজাস টোস্ট

1
এটার কি কোন ডাউনসাইড আছে? আপনার যদি 100k সারি থাকে তবে আমি সন্দেহ করি এটি ভাল হতে পারে।
মার্টিন ডসন

2
@ মার্টিনম্যাজাডাডসন, আপনার একবারে জিজ্ঞাসা সম্পাদনের জন্য 100K রেকর্ড দরকার? আমি মনে করি, পৃষ্ঠাগুলি ব্যবহার করা এই পরিস্থিতির জন্য একটি ভাল ধারণা
কাজেম

পুরানো বিষয় উত্থাপনের জন্য দুঃখিত তবে একটি সংগ্রহস্থল প্যাটার্ন বিকাশ করার সময় আমি একই ত্রুটির মধ্যে এসেছি এবং সংগ্রহস্থলের প্রতিটি পদ্ধতিতে ".ToList () বা একক () বা গণনা ()" যোগ করে সমাধান করেছি। শুরুর দিকে আমি কেবল ফিরে আসছিলাম ".সর্বশম ()"। এখন আমার প্রশ্নটি হ'ল: সংগ্রহস্থলটি "টুলিস্ট ()" ফিরিয়ে দেবে, বা এই কি এমন কিছু যা চূড়ান্ত গ্রাহককে (যেমন: পরিষেবা / ব্যবসার যুক্তি) দাবি করা হবে
অ্যাসলেসেসিও

আমার জন্য কাজ কর. .ToList যোগ করা দশমিক সমর্থন ইস্যুটি JetEntityFrameworkProvider এ সমাধান করে। Total = storeDb.OF_Carts.Where(x => x.CartId == ShoppingCartId).ToList().Sum(t => t.Quantity * t.Item.UnitPrice);
hubert17

39

.ToList()আবার পড়তে না পারাতে অবজেক্ট রিডকে ডিবি থেকে তালিকায় রূপান্তর করতে সিনট্যাক্সটি ব্যবহার করুন ope আশা করি এটি এর জন্য কাজ করবে। ধন্যবাদ।


22

এখানে রেফারেন্স প্রয়োজন এমন ব্যক্তির জন্য একটি ওয়ার্কিং সংযোগ স্ট্রিং।

  <connectionStrings>
    <add name="IdentityConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\IdentityDb.mdf;Integrated Security=True;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
  </connectionStrings>

15
MARS সক্ষম করা একটি কাজের সমাধান, সমস্যার সমাধান নয়।
স্যান্ডরক

5
মার্স ডকুমেন্টেশন পৃষ্ঠা থেকে: "মার্স অপারেশনগুলি থ্রেড-নিরাপদ নয়।" এর অর্থ, যদি প্রসঙ্গটি অ্যাক্সেস করে একাধিক থ্রেড থেকে সমস্যা দেখা দেয় তবে মার্স (সম্ভবত) সমাধান নয়।
মার্সপ

20

আমার ক্ষেত্রে, Include()এই ত্রুটিটি সমাধান করা এবং পরিস্থিতির উপর নির্ভর করে অনেক বেশি কার্যকর হতে পারে তখন একসাথে যোগদানের সাথে একসাথে অনুসন্ধান করা যেতে পারে তখন একাধিক প্রশ্ন জারী করা যায়।

IEnumerable<User> users = db.Users.Include("Projects.Tasks.Messages");

foreach (User user in users)
{
    Console.WriteLine(user.Name);
    foreach (Project project in user.Projects)
    {
        Console.WriteLine("\t"+project.Name);
        foreach (Task task in project.Tasks)
        {
            Console.WriteLine("\t\t" + task.Subject);
            foreach (Message message in task.Messages)
            {
                Console.WriteLine("\t\t\t" + message.Text);
            }
        }
    }
}

আপনার অ্যাপ্লিকেশনটিকে অন্যথায় মার্সের প্রয়োজন না হলে এটিই সেরা সমাধান।
ফ্রেড উইলসন

7

আমি জানি না এটি সদৃশ উত্তর কিনা তা নয়। যদি হয় তবে আমি দুঃখিত। আমি টুলিস্ট () ব্যবহার করে কীভাবে আমার সমস্যা সমাধান করেছি তা অভাবীদের জানাতে চাই।

আমার ক্ষেত্রে নীচের প্রশ্নের জন্য আমি একই ব্যতিক্রম পেয়েছি।

int id = adjustmentContext.InformationRequestOrderLinks.Where(item => item.OrderNumber == irOrderLinkVO.OrderNumber && item.InformationRequestId == irOrderLinkVO.InformationRequestId).Max(item => item.Id);

আমি নীচের মত সমাধান

List<Entities.InformationRequestOrderLink> links = adjustmentContext.InformationRequestOrderLinks
.Where(item => item.OrderNumber == irOrderLinkVO.OrderNumber && item.InformationRequestId == irOrderLinkVO.InformationRequestId).ToList();

int id = 0;

if (links.Any())
{
  id = links.Max(x => x.Id);
 }
if (id == 0)
{
//do something here
}

5

দেখা যাচ্ছে আপনি একই EF প্রসঙ্গটি ব্যবহার করে একটি সক্রিয় ক্যোয়ারির মধ্যে থেকে ডেটলাস্টআপডেটেড কল করছেন এবং ডেটলাস্টআপডেট নিজেই ডেটা স্টোরটিতে একটি আদেশ জারি করে। সত্তা ফ্রেমওয়ার্ক কেবল একবারে প্রসঙ্গ অনুসারে একটি সক্রিয় কমান্ড সমর্থন করে।

আপনি আপনার উপরের দুটি প্রশ্নের পুনরুদ্ধার করতে পারেন এটির মতো:

return accounts.AsEnumerable()
        .Select((account, index) => new AccountsReport()
        {
          RecordNumber = FormattedRowNumber(account, index + 1),
          CreditRegistryId = account.CreditRegistryId,
          DateLastUpdated = (
                                                from h in context.AccountHistory 
                                                where h.CreditorRegistryId == creditorRegistryId 
                              && h.AccountNo == accountNo 
                                                select h.LastUpdated).Max(),
          AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber)
        })
        .OrderBy(c=>c.FormattedRecordNumber)
        .ThenByDescending(c => c.StateChangeDate);

আমি লক্ষ্য করেছি আপনি কোয়েরিতে ফরম্যাটএকউন্টাউন্ট নাম্বার এবং ফর্ম্যাটডেকর্ডনম্বরের মতো ফাংশনগুলি কল করছেন। যদি না এগুলি আপনার ডাটাবেস থেকে সত্তা ডেটা মডেলটিতে আমদানি করে এবং সঠিকভাবে ম্যাপ করা থাকে তবে এগুলি ব্যতিক্রমগুলি ছুঁড়ে ফেলবে কারণ EF কীভাবে বিবরণীতে ডেটা স্টোরে প্রেরণ করতে পারে সেই ফাংশনগুলিকে কীভাবে অনুবাদ করবেন তা জানেনা।

আরও মনে রাখবেন, AsEnumerable কল করা ক্যোয়ারিকে কার্যকর করতে বাধ্য করে না। যতক্ষণ না কোয়েরি কার্যকর করা গণনা করা অবধি স্থগিত হয়। আপনি যদি চান তবে আপনি ToList বা ToArray এর মাধ্যমে গণনা জোর করতে পারেন।


আপনি যদি চান তবে আপনি যে অ্যাকাউন্টটি প্রতিবেদনটি অনুসন্ধানের জন্য আপনার নির্বাচিত প্রজেকশনটিতে ডেটলাস্টআপডেটেড ডিরেক্টরি পেতে এবং যে ত্রুটি ছাড়াই কাঙ্ক্ষিত প্রভাবটি পেতে চান তা পুনরুদ্ধার করতে পারেন।
জেমস আলেকজান্ডার

মূল ক্যোয়ারির ভিতরে ফাংশনের কোড রাখার পরে আমি একই ত্রুটি
পাচ্ছি

2

লাদিস্লাভ মিঙ্কার উত্তর ছাড়াও :

আপনি প্রকাশ এবং এর ধারক অগ্রাহ্য হয় সেটিং ট্যাবে, আপনি সেট করতে পারেন MultipleActiveResultSet সত্যতে। আপনি অ্যাডভান্সড ... এ ক্লিক করে এই বিকল্পটি আবিষ্কার করতে পারেন এবং এটি অ্যাডভান্সড গ্রুপের অধীনে চলেছে ।


2

গুগলের মাধ্যমে এটি সন্ধানকারীদের জন্য;
আমি এই ত্রুটিটি পেয়েছি কারণ, ত্রুটির দ্বারা প্রস্তাবিত হিসাবে, আমি একই স্কেলকম্যান্ডে অন্যটি তৈরি করার আগে কোনও স্কেলডাটাআরডার বন্ধ করতে ব্যর্থ হয়েছি, ভুল করে ধরে ধরেছিলাম যে এটি তৈরি করা পদ্ধতিটি রেখে যাওয়ার পরে এটি আবর্জনা সংগ্রহ করা হবে।

আমি sqlDataReader.Close();দ্বিতীয় পাঠক তৈরি করার আগে ফোন করে বিষয়টি সমাধান করেছি ।


2

আমার ক্ষেত্রে, আমি ডেটা প্রসঙ্গে যেমন একটি প্রশ্ন খুলেছি

    Dim stores = DataContext.Stores _
        .Where(Function(d) filter.Contains(d.code)) _

... এবং পরে একই জিজ্ঞাসা ...

    Dim stores = DataContext.Stores _
        .Where(Function(d) filter.Contains(d.code)).ToList

যোগ করা হচ্ছে .ToListআমার সমস্যা প্রথম সমস্যাগুলি সমাধান করা হয়। আমি মনে করি যে এটি কোনও সম্পত্তিতে এটি মুড়িয়ে ফেলা বুদ্ধিমান:

Public ReadOnly Property Stores As List(Of Store)
    Get
        If _stores Is Nothing Then
            _stores = DataContext.Stores _
                .Where(Function(d) Filters.Contains(d.code)).ToList
        End If
        Return _stores
    End Get
End Property

যেখানে _ স্টোরগুলি একটি ব্যক্তিগত ভেরিয়েবল এবং ফিল্টারগুলি এমন একটি পঠনযোগ্য সম্পত্তি যা অ্যাপসেটিংগুলি থেকে পড়ে।


1

আমার একই ত্রুটি হয়েছিল, যখন আমি রিড লুপের মধ্যে কিছু রেকর্ড আপডেট করার চেষ্টা করেছি। আমি সর্বাধিক ভোট দেওয়া উত্তর চেষ্টা করেছি MultipleActiveResultSets=trueএবং খুঁজে পেয়েছি যে, পরবর্তী ত্রুটিটি পাওয়ার পক্ষে এটি কেবলমাত্র একচেটিয়া কাজ 

নতুন লেনদেনের অনুমতি নেই কারণ সেশনে অন্যান্য থ্রেড চলছে

সর্বাধিক পদ্ধতি, যা বিশাল রেজাল্টসেটগুলির জন্য কাজ করবে তা হ'ল অ্যান্টিটি ফ্রেমওয়ার্ক থেকে স্কেলএক্সসেপশন বর্ণিত প্রতিটি অংশের জন্য পৃথক প্রসঙ্গ খণ্ড ব্যবহার এবং  নতুন ট্রানজেকশন অনুমোদিত নয় কারণ সেশনে অন্যান্য থ্রেড চলছে


1

আমি এই সমস্যাটির সমাধানের জন্য অপেক্ষা করুন_সেসাউন্টসেশনডাটা মোডেল aveসেভচেনজেস এ্যাসেন্স (); থেকে _ অ্যাকাউন্টসেশনডেটা মডেল.সভেচেনজেসস (); আমার সংগ্রহশালা ক্লাসে।

 public async Task<Session> CreateSession()
    {
        var session = new Session();

        _accountSessionDataModel.Sessions.Add(session);
        await _accountSessionDataModel.SaveChangesAsync();
     }

এটি এতে পরিবর্তন করা হয়েছে:

 public Session CreateSession()
    {
        var session = new Session();

        _accountSessionDataModel.Sessions.Add(session);
        _accountSessionDataModel.SaveChanges();
     }

সমস্যাটি হ'ল আমি একটি অধিবেশন তৈরি করার পরে সীমান্তে সেশনগুলি আপডেট করেছি (কোডে) তবে SaveChangesAsync অবিচ্ছিন্নভাবে ঘটায়, সেশনগুলি আনার ফলে এই ত্রুটি হয়েছিল কারণ দৃশ্যত SaveChangesAsync অপারেশন প্রস্তুত ছিল না।


1

আমার জন্য এটি আমার নিজের বাগ ছিল। আমি যখন INSERTব্যবহার করা SqlCommand.executeReader()উচিত ছিল তখন একটি ব্যবহার চালানোর চেষ্টা করছিলাম SqlCommand.ExecuteNonQuery()। এটি খোলা হয়েছিল এবং কখনও বন্ধ হয়নি, ত্রুটির কারণ হয়েছিল। এই তদারকির জন্য সতর্কতা অবলম্বন করুন।


এটা আমার পক্ষ থেকে একই সমস্যা ছিল। আমার সেক্লককম্যান্ড.এক্সিকিউটরিডার () দরকার ছিল কারণ আমি সন্নিবেশ করা সারিগুলির আইডি পাচ্ছি। সুতরাং: আমি SQLDataReader.Close () ব্যবহার করেছি; বর্গ কমান্ড। ডিসপোজ (); ধন্যবাদ @ অ্যান্ড্রু টেলর
ফুয়াত

1

এটি বাস্তব বিশ্বের পরিস্থিতি থেকে উত্তোলন করা হয়েছে:

  • কোডটি স্টেজে পরিবেশে ভাল কাজ করে মাল্টিপল অ্যাক্টিভর রেজাল্টসেটস সংযোগ স্ট্রিংয়ে সেট করা হয়
  • MultipleActiveResultSets = সত্য ছাড়াই উত্পাদন পরিবেশে কোড প্রকাশিত
  • একটি পৃষ্ঠা ব্যর্থ হওয়ার সাথে সাথে অনেক পৃষ্ঠা / কল কাজ করে
  • কলটির কাছাকাছি তাকিয়ে, ডিবিতে একটি অপ্রয়োজনীয় কল এসেছে এবং এটি অপসারণ করা দরকার
  • মাল্টিপলএ্যাকটিভআরসাল্টসেটস সেট করুন = উত্পাদনের ক্ষেত্রে সত্য এবং ক্লিন আপ কোড প্রকাশ করুন, সবকিছু ভালভাবে এবং দক্ষতার সাথে কাজ করে

উপসংহারে, মাল্টিপল অ্যাক্টিভর রিসাল্টসেটগুলি ভুলে না গিয়ে, কোডটি খুব বেশি ব্যয়বহুল হতে পারে এমন একটি রিলান্ট ডিবি কল আবিষ্কার করার আগে দীর্ঘ সময় চালিত হতে পারে এবং আমি মাল্টিপলঅ্যাকটিভরেসাল্টসেটস অ্যাট্রিবিউট সেট করার উপর পুরোপুরি নির্ভর না করার পরামর্শ দিয়েছি তবে কোডটির কেন প্রয়োজন তাও খুঁজে বের করার পরামর্শ দিয়েছি suggest যেখানে এটি ব্যর্থ হয়েছে


1

সত্তা ফ্রেমওয়ার্কের "অলস লোডিং" বৈশিষ্ট্যের কারণে সম্ভবত এই সমস্যাটি ঘটে। সাধারণত, প্রাথমিক আনার সময় সুস্পষ্টভাবে প্রয়োজন না হলে, সমস্ত যুক্ত ডেটা (যে কোনও তথ্য অন্য ডাটাবেস টেবিলগুলিতে সঞ্চিত থাকে) কেবল যখন প্রয়োজন হয় তখনই তা আনা হয়। অনেক ক্ষেত্রে এটি একটি ভাল জিনিস, যেহেতু এটি অপ্রয়োজনীয় ডেটা আনতে বাধা দেয় এবং এইভাবে ক্যোয়ারি পারফরম্যান্সকে উন্নত করে (যোগ দেয় না) এবং ব্যান্ডউইথকে সংরক্ষণ করে।

প্রশ্নের বর্ণিত পরিস্থিতিতে, প্রাথমিক আনয়ন সম্পাদন করা হয়, এবং "নির্বাচন" পর্যায়ে অনুপস্থিত অলস লোডিং ডেটা অনুরোধ করা হয়, অতিরিক্ত অনুসন্ধান জারি করা হয় এবং তারপরে ইএফ "ওপেন ডেটারিডার" সম্পর্কে অভিযোগ করছে।

গৃহীত উত্তরে প্রস্তাবিত ওয়ার্কআরউন্ড এই প্রশ্নের প্রয়োগের অনুমতি দেবে এবং সত্যই পুরো অনুরোধটি সফল হবে।

তবে, আপনি যদি ডাটাবেসে প্রেরিত অনুরোধগুলি পরীক্ষা করেন তবে আপনি একাধিক অনুরোধগুলি লক্ষ্য করবেন - প্রতিটি নিখোঁজ (অলস বোঝা) ডেটার জন্য অতিরিক্ত অনুরোধ। এটি একটি পারফরম্যান্স হত্যাকারী হতে পারে।

প্রাথমিক ক্যোয়ারীর সময় প্রয়োজনীয় সমস্ত অলস বোঝা ডেটা প্রিলোড করতে ইএফকে বলা আরও ভাল পদ্ধতির। এটি "অন্তর্ভুক্ত" বিবৃতি ব্যবহার করে করা যেতে পারে:

using System.Data.Entity;

query = query.Include(a => a.LazyLoadedProperty);

এইভাবে, সমস্ত প্রয়োজনীয় যোগদানগুলি সম্পাদন করা হবে এবং সমস্ত প্রয়োজনীয় ডেটা একক ক্যোয়ারী হিসাবে ফিরে আসবে। প্রশ্নে বর্ণিত বিষয়টি সমাধান করা হবে।


এটি একটি বৈধ উত্তর, কারণ আমি অন্তর্ভুক্তি ব্যবহার করে অ্যান্টিএন্ট্রি.কলেশন () লোড () ব্যবহার করতে গিয়েছি এবং আমার সমাধানটি কাজ থেকে বিরতিতে চলে গেছে। দুর্ভাগ্যক্রমে, জেনেরিকের জন্য অন্তর্ভুক্ত করুন অন্য "জেনারিক" তখন "অন্তর্ভুক্ত" করতে পারে না, তাই আমি এখনও এন্টিএন্ট্রি.কলেশন ()। লোড () কাজ করার চেষ্টা করছি।
অ্যান্ড্রুবেনজামিন

0

আমি আমার সরঞ্জামটিতে ওয়েব পরিষেবা ব্যবহার করছি, যেখানে সেই পরিষেবাগুলি সঞ্চিত পদ্ধতিটি আনে। আরও অনেক ক্লায়েন্ট সরঞ্জাম ওয়েব পরিষেবা আনার সময়, এই সমস্যা দেখা দেয়। আমি সেই ফাংশনগুলির জন্য সিঙ্ক্রোনাইজ করা অ্যাট্রিবিউট নির্দিষ্ট করে নির্দিষ্ট করে রেখেছি stored এখন এটি ঠিকঠাক কাজ করছে, ত্রুটিটি আমার সরঞ্জামটিতে কখনই প্রদর্শিত হয়নি।

 [MethodImpl(MethodImplOptions.Synchronized)]
 public static List<t> MyDBFunction(string parameter1)
  {
  }

এই বৈশিষ্ট্যটি একবারে একটি অনুরোধ প্রক্রিয়া করতে দেয়। সুতরাং এটি সমস্যার সমাধান করে।


0

পার্শ্ব-নোট হিসাবে ... এসকিউএল অবজেক্টগুলি থেকে (অভ্যন্তরীণ) ডেটা-ম্যাপিংয়ের ক্ষেত্রে কোনও সমস্যা হলে এটিও ঘটতে পারে।

এই ক্ষেত্রে...

আমি এমন একটি তৈরি করেছি SQL Scalar Functionযা ঘটনাক্রমে একটি VARCHAR... এবং তারপরে ... এটি একটি কলাম তৈরি করতে ব্যবহার করেছিল VIEWVIEWসঠিকভাবে ম্যাপ ছিল DbContext... তাই Linq এটা ঠিক সূক্ষ্ম ডাকছিলেন। যাইহোক, সত্তা ডেটটাইম প্রত্যাশিত ? এবং স্ট্রিংVIEW ফিরে ছিল ।

কোন ODDLY ছুড়ে ফেলে ...

"এই কমান্ডের সাথে ইতিমধ্যে সম্পর্কিত একটি উন্মুক্ত ডেটা রিডার রয়েছে যা প্রথমে বন্ধ করতে হবে"

এটি নির্ধারণ করা কঠিন ছিল ... তবে আমি ফেরতের প্যারামিটারগুলি সংশোধন করার পরে ... সব ঠিক ছিল


0

আমার ক্ষেত্রে, আমাকে সংযোগের স্ট্রিংয়ে সেট MultipleActiveResultSetsকরতে Trueহয়েছিল।
তারপরে এটি একই ডেটা প্রসঙ্গে একই সাথে 2 (এসকিউএল) কমান্ড চালাতে না পারা সম্পর্কে অন্য একটি ত্রুটি (আসল একটি) হাজির! (মতিন কোর, কোড প্রথম)
তাই আমাকে সমাধান অন্য কোন জন্য চেহারা ছিল অ্যাসিঙ্ক্রোনাস কমান্ড সঞ্চালনের এবং তাদের চালু সমলয় , যেমন আমি উভয় কমান্ডের জন্য মাত্র এক DbContext ছিল।

আমি এটি আপনাকে সাহায্য করে আশা করি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.