2014-10-19 60 views
0

我有以下實體對象(數據庫版本上右):DbUpdateException被拋出了未知的原因

Invoker     
(N) Commands 

Command      
(1) Event    EventId(FKEY) 
(N) Effects    
(N) Conditions 
--Other members 

Effect 
(1) EffectType  EffectTypeId(FKEY) 
(N) Properties  CommandId(FKEY) 
(N) Conditions 
--Other members 

         CommandConditions: ConditionId(PKEY, FKEY), CommandId(FKEY)  
         EffectConditions: ConditionId(PKEY, FKEY), EffectId(FKEY)        

Condition 
(1) ConditionType   
(N) Properties 

         EffectProperties: PropertyId(PKEY, FKEY), EffectId(FKEY) 
         ConditionProperties: PropertyId(PKEY, FKEY), ConditionId(FKEY) 

Property 
Name 
Value 

當我想更新現有調用實體,我不喜歡這樣寫道:

public void UpdateInvoker(Invoker existingInvoker, InvokerViewModel contract, MyEntities context) 
{ 
    //typeof(Invoker.Command = CommandViewModel 
    existingInvoker.Commands = contract.Commands.Select(c => c.ToDataCommand(context)); 
} 

public Command ToDataCommand(MyEntities context) 
{ 
     var command = context.Commands.Create(); 
     command.CommandEvent = context.Events.First(e => e.EventName == Event.Name); 
     command.CommandConditions = Conditions.Select(c => c.ToDataCondition(context)).ToList(); 
     command.CommandEffects = Effects.Select(e => e.ToDataEffect(context)).ToList(); 
     context.Commands.Add(command); 
     return command; 
} 

用於生成命令的相同設置也用於生成效果,條件和屬性實體。當我犯這個交易,我收到一個有點無助DbUpdateException:

型「System.Data.Entity.Infrastructure.DbUpdateException」的第一次機會異常出現在EntityFramework.dll

其他信息:衝突的改變檢測。嘗試插入具有相同密鑰的多個實體時可能會發生這種情況。

但是,這個設置如何創建具有匹配鍵的實體?當實體在同一列上有PKEY和FKEY時,實體框架是否工作不正常?

回答

0

看來問題在於實體框架不喜歡外鍵和主鍵在同一列上。刪除這個問題解決了我的問題。