2012-07-11 15 views
6

की वर्तमान स्थिति के कारण ऑपरेशन मान्य नहीं है I ODP.NET 11.2.0.3.0 के साथ इकाई फ्रेमवर्क का उपयोग कर रहा हूं। मुझे कुछ तालिकाओं के लिए दृढ़ता से काम करना पड़ा, लेकिन यह एक फ्लैट आउट एक साधारण नई वस्तु जोड़ने से इंकार कर देता है और मैं इसे काफी समझ नहीं सकता। आपकी मदद बहुत ही सराहनिय है। धन्यवादऑपरेशन

यहां कोड है। मैंने ऑब्जेक्ट से मॉडल ब्राउज़र के माध्यम से छवि फ़ील्ड को हटा दिया और अभी भी कोड विफल रहता है जब SaveChanges() को कॉल किया जाता है।

var corpDirectoryEntities = new CorpDirectoryEntities(); 
var cc = new EmployeePhoto(); 
cc.UserId = 12345; // NUMBER field 
cc.ImageName = "imagename"; // VARCHAR2(100) 
cc.Image = photoStream; // LONG RAW 
corpDirectoryEntities.EmployeePhotos.AddObject(cc); 
corpDirectoryEntities.SaveChanges(); 

निम्नलिखित अपवाद होता है।

 
System.Data.UpdateException was unhandled by user code 
    Message=An error occurred while updating the entries. See the inner exception for details. 
    Source=System.Data.Entity 
    StackTrace: 
     at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
     at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 
     at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
     at System.Data.Objects.ObjectContext.SaveChanges() 
     at Repositories.Services.CorpDirectory.CorpDirectoryRepository.SaveDirectoryAccountPhoto(Int32 accountId, Byte[] photoStream) in C:\Dev\Projects\Repositories\Services\CorpDirectory\CorpDirectoryRepository.cs:line 356 
     at Tests.CorpDirectory.CorpDirectoryUserTestFixture.TestGetUserPhoto() in C:\Dev\Projects\Repositories.Tests\CorpDirectory\CorpDirectoryUserTestFixture.cs:line 192 
    InnerException: System.Data.EntityCommandCompilationException 
     Message=An error occurred while preparing the command definition. See the inner exception for details. 
     Source=System.Data.Entity 
     StackTrace: 
      at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
      at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues) 
      at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) 
      at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
     InnerException: System.InvalidOperationException 
      Message=Operation is not valid due to the current state of the object. 
      Source=Oracle.DataAccess 
      StackTrace: 
       at Oracle.DataAccess.Client.SqlGen.DmlSqlGenerator.ExpressionTranslator.Visit(DbScanExpression expression) 
       at System.Data.Common.CommandTrees.DbScanExpression.Accept(DbExpressionVisitor visitor) 
       at Oracle.DataAccess.Client.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree tree, EFOracleProviderManifest providerManifest, EFOracleVersion sqlVersion, List`1& parameters) 
       at Oracle.DataAccess.Client.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, EFOracleProviderManifest providerManifest, EFOracleVersion sqlVersion, List`1& parameters, CommandType& commandType) 
       at Oracle.DataAccess.Client.EFOracleProviderServices.CreateCommand(EFOracleProviderManifest providerManifest, DbCommandTree commandTree) 
       at Oracle.DataAccess.Client.EFOracleProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) 
       at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) 
       at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree) 
       at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
      InnerException: 

उत्तर

16

तो, इसे घंटों तक देखने के बाद, मुझे अंततः यह मिला। मैंने .ssdl फ़ाइल की जांच की। मेरी वस्तुओं के बीच एक अंतर यह था कि कैसे <EntitySet ... > परिभाषित किया गया था। मैंने इसे बदल दिया और, ज़ाहिर है, यह अब काम करता है। ईएफ डिजाइनर सिर्फ भगवान भयानक है।

<EntitySet Name="EmployeePhoto" ... store:Name="TABLE_NAME"> 
    <DefiningQuery> 
     SELECT ..... 
    </DefiningQuery> 
</EntitySet> 

मैं <DefiningQuery...> हटाया और अन्य संस्थाओं से मेल करने के लिए निम्न से बदल दिया: अगर एक दैवज्ञ मेज पर कोई प्राथमिक कुंजी है

<EntitySet Name="EmployeePhoto" ... /> 
+2

एक परिभाषित क्वेरी जोड़ना रहस्यमय तरीके से ओरेकल डीबी के साथ एंटिटी ऑपरेशंस तोड़ देगा। – BigMomma

+2

कोई विचार क्यों डिज़ाइनर कुछ तालिकाओं को क्वेरी के रूप में उत्पन्न कर रहा है? –

+0

क्योंकि माइक्रोसॉफ्ट और ओरेकल साथ नहीं मिल सकते हैं। –

2

, इकाई फ़्रेमवर्क यह एक निर्णायक क्वेरी का उपयोग जब यह कर देगा आपके ईएफ स्कीमा में आयात किया जाता है। फिर, चूंकि यह एक क्वेरी है, एक टेबल नहीं, जब आप इसमें कुछ जोड़ने का प्रयास करते हैं तो यह एक अमान्य ऑपरेशन अपवाद के साथ उड़ाएगा।

0

मैं पुरानी प्रोजेक्ट को अपग्रेड करने का प्रयास करते समय यह त्रुटि मार रहा हूं।

सुनिश्चित करें कि आपकी प्रोजेक्ट आपके पैकेज फ़ाइल में सूचीबद्ध .net फ्रेमवर्क संस्करण से मेल खाती है। जैसे अगर आपके पास net452 सूचीबद्ध है, तो सुनिश्चित करें कि आपकी परियोजना नेट 4.5.2 का उपयोग करने के लिए सेट है। यदि आपके समाधान में एक से अधिक प्रोजेक्ट हैं, तो सुनिश्चित करें कि वे सभी सही .net फ्रेमवर्क संस्करण पर सेट हैं।

इसके अलावा, मैं जब परियोजना के लिए एक नया डेटा मॉडल जोड़कर, यह के रूप में जो मॉडल फ़ाइल जोड़ने के लिए करने के लिए भ्रमित हो जाएगा देखा। मेरा मानना ​​है कि यह मेरे देव बॉक्स पर स्थापित टीएफएस के कारण था (मैंने व्यक्त किया था, फिर नवीनतम स्थापित करें)। इस समस्या को हल करने के लिए, मैंने अभी परियोजना को टीएफएस से डिस्कनेक्ट कर दिया है)।

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