2010-01-31 29 views
2

下面是內部異常:異常有關外鍵

InnerException: System.Data.UpdateException 
Message=Entities in 'OrganizerDBEntities.Assignments' participate in 
the 'CourseId' relationship. 0 related 'Course' were found. 
1 'Course' is expected.` 

我有三個表(文件夾,作業,課程)。 Assignment表有一個名爲AssignmentId的主鍵和一個名爲CourseId的「允許空值」屬性設置爲true的外鍵。所以這個異常阻止了我調用_entities.SaveChanges();從而阻止我將數據添加到數據庫。


UPDATE:多虧了馬克,這個問題解決了,但彼起:

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: 

回答

5

我會檢查的第一件事是在你的EF概念模型的關聯OrganizerDBEntities.Assignments。它是否允許0:n關係?從錯誤信息中,我可以相信它沒有。您可以調整EF模型中的基數(最小和最大可能值)。

如果您選擇EDMX設計器表面中兩個實體之間的關聯,則屬性窗口將顯示關聯的兩端。在每個「End」屬性中,都有一個「Multiplicity」值,它定義了關聯的基數:0:*,0..1:*,1:*等等。

如果你確實想要允許一個缺失的值,你的關聯子結點的多樣性需要是0..1(零或一) - 它是真的0..1(零還是一)?或者它是否設置爲1?

+0

在我的協會的結尾是1 .. *(課程到作業) – 2010-01-31 21:44:24

+0

你有你的問題 - 概念EF模型需要一個外鍵!這就是你遇到錯誤的原因。嘗試將該關聯設置爲0:1 .. *而不是 – 2010-01-31 21:51:41

+0

保留。我重新創建了模型,現在它是0..1 - > *(從課程到作業) – 2010-02-01 01:23:48

1

在這裏我的2美分。
我只是避免將外鍵值設置爲NULL.So而不是設置CourseId作爲分配表中的外鍵,將AssignmentId設置爲課程表中的外鍵。

+0

+1:爲了反轉關聯到另一個表的想法,這節省了我的一天:) – 2012-08-28 20:18:17