استثناء عن المفتاح الخارجي
-
24-09-2019 - |
سؤال
هذا هو الاستثناء الداخلي:
InnerException: System.Data.UpdateException
Message=Entities in 'OrganizerDBEntities.Assignments' participate in
the 'CourseId' relationship. 0 related 'Course' were found.
1 'Course' is expected.`
لدي ثلاثة جداول (مجلد ، مهمة ، دورة). يحتوي جدول المهمة على مفتاح أساسي يسمى ignemplingid ومفتاحًا خارجيًا يسمى CourseId الذي تم تعيين خاصية "السماح" بممتلكات Nulls على True. لذلك هذا الاستثناء يمنعني من الاتصال بـ _entities.savechanges () ؛ وبالتالي تنبثق من إضافة البيانات إلى قاعدة البيانات.
تحديث: بفضل مارك ، تم حل هذه المشكلة ، ولكن نشأت أخرى:
InnerException: System.Data.UpdateException
Message=An error occurred while updating the entries. See the InnerException 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(Boolean acceptChangesDuringSave)
at System.Data.Objects.ObjectContext.SaveChanges()
at AssignmentOrganizer.App_Data.AssignmentRepository.CreateAssignment(Assignment assignmentToCreate) in C:\Users\Mohit\Documents\Visual Studio 2010\Projects\AssignmentOrganizer\AssignmentOrganizer\App_Data\AssignmentRepository.cs:line 19
at AssignmentOrganizer.MainWindow..ctor() in C:\Users\Mohit\Documents\Visual Studio 2010\Projects\AssignmentOrganizer\AssignmentOrganizer\MainWindow.xaml.cs:line 54
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.NotSupportedException
Message=Server-generated keys and server-generated values are not supported by SQL Server Compact.
Source=System.Data.SqlServerCe.Entity
StackTrace:
at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateReturningSql(StringBuilder commandText, DbModificationCommandTree tree, ExpressionTranslator translator, DbExpression returning)
at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree tree, List`1& parameters, Boolean isLocalProvider)
at System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, List`1& parameters, CommandType& commandType, Boolean isLocalProvider)
at System.Data.SqlServerCe.SqlCeProviderServices.CreateCommand(DbProviderManifest providerManifest, DbCommandTree commandTree)
at System.Data.SqlServerCe.SqlCeProviderServices.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:
المحلول
أول شيء أود أن أتحقق منه هو الرابطة OrganizerDBEntities.Assignments
في النموذج المفاهيمي EF الخاص بك. هل يسمح بالعلاقات 0: n؟ من رسالة الخطأ ، أنا أؤدي إلى تصديق أنها لا. يمكنك تعديل Cardinality (القيم الممكنة Min و Max) في نموذج EF الخاص بك.
إذا قمت بتحديد ارتباط بين كيانين في سطح مصمم EDMX الخاص بك ، فإن نافذة الخصائص تعرض طرفي الارتباط. في كل من خصائص "النهاية" هذه ، هناك قيم "تعدد" تحدد Cardinality للجمعية: 0:*
, 0..1:*
, 1:*
وهكذا دواليك.
إذا كنت ترغب في السماح بقيمة مفقودة ، فإن التعددية في الطرف الطفل من جمعيتك يجب أن تكون 0..1 (صفر أو واحد) - هل هو حقا 0..1 (صفر أو واحد)؟ أم أنه تم ضبطه على 1 بدلاً من ذلك؟
نصائح أخرى
هنا 2 سنت.
أنا فقط أتجنب تعيين قيم المفاتيح الخارجية على NULL.SO بدلاً من تعيين الدورة التدريبية كمفتاح خارجي في جدول التعيين ، قم بتعيين TINDINGEDED كمفتاح خارجي في جدول الدورة التدريبية.