假设我在数据库中有一行我知道的特定id(在下面的示例中--Id = 5的符号),我可以创建一个EntityObject,它可以附加到另一个实体而无需加载它来自数据库(同样的情况也适用于“DeleteObject”,如果你考虑一下......)?
我尝试了以下内容:
UserSpread spread = UserSpread.CreateUserSpread(5, 500000, 1.1m, 1.5m);
EntityKey symbolKey = new EntityKey("Entities.SymbolSet", "Id", 5);
Symbol symbol = new Symbol();
symbol.EntityKey = symbolKey;
// dealingEntities.Attach(symbol);
spread.Symbol = symbol;
Entities.AddToSpreadSet(spread);
我在“AddToSpreadSet()”方法上得到以下异常:
“无法将对象添加到ObjectStateManager,因为它已经有一个EntityKey。使用ObjectContext.Attach附加一个具有现有密钥的对象。”
如果我在将符号分配给spread(注释行)之前尝试附加符号,我会在“SaveChanges()”方法中得到以下内容:
“无法附加对象,因为作为EntityKey一部分的属性的值与EntityKey中的对应值不匹配。”
任何想法?
谢谢,
尼尔
答案 0 :(得分:3)
我使用的一般方法是创建一个存根实体(通过仅设置PK)并将其附加到上下文。
所以这是一个例子:
Category existing = new Category {ID = 7};
ctx.AttachTo("Categories", existing); // Notice no use of EntityKey anywhere
// build a new product
...
product.Category = existing;
ctx.AddToProducts(product);
ctx.SaveChanges();
这适用于构建关系,但删除时有一些注意事项。因此,请务必查看我的EF tips series以获取更多信息。 尤其是这一个:
Tip 9 - How to delete an object without retrieving it
希望这有帮助
亚历
答案 1 :(得分:1)
可以做你要问的事。您必须执行以下操作:
dealingEntities.symbolReference.EntityKey = new EntityKey(“Entities.SymbolSet”,“Id”,5);
这有意义吗?我可能会将您的实体名称混淆,请询问我是否需要进一步的信息。