我有以下实体对象(右边的数据库版本):
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:
EntityFramework.dll中出现'System.Data.Entity.Infrastructure.DbUpdateException'类型的第一次机会异常
其他信息:检测到冲突的更改。尝试使用相同的密钥插入多个实体时可能会发生这种情况。
但是这个设置如何创建具有匹配键的实体?当实体在同一列上具有PKEY和FKEY时,实体框架是否工作不正常?
答案 0 :(得分:0)
似乎问题在于实体框架不喜欢外键而主键在同一列上。删除此问题解决了我的问题。