![](/img/trans.png)
[英]Entity Framework “An object with the same key already exists in the ObjectStateManager.” - I can't understand how, or what to do from here
[英]How do I add an object with the entity framework when it has a foreign key object that already exists
我有 2 張桌子:
tblAuthors
- id
- username
tblPosts
- id
- authorid
所以如果我創建一個新帖子
var post = new Post { Id=Guid.NewId(), Author=new Author { UserName="username", Id="id in database } };
帖子的作者已經在數據庫中了,但是帖子本身沒有...
所以我想做:
entities.AddToPosts(obj);
但它試圖添加作者和帖子......有沒有辦法讓它保存作者並添加帖子? 還是完全忽略作者?
我將 Post 和 Author 作為我自己的 POCO 業務對象,它們從數據庫中提取,然后轉換為我的業務層。 我不想重新拉它們,因為我可以在我的業務層進行修改。 所以我只想附加對象。
我不想保留數據對象,我將它們拉出並將它們轉換為業務對象,然后在我想推回數據庫並將業務對象轉換為數據對象之前不要再次觸摸它們。
可以模擬“知名”實體,而無需訪問數據庫。 新建實體object,設置實體鍵中使用的實體屬性,調用ObjectContext.AttachTo。 這會將實體添加到未更改 state 中的上下文中,並且現在可以被其他實體引用。
// AttachTo
var item = new Item() { ItemId = wellKnownId };
context.AttachTo( "Items", item );
Assert.AreEqual( EntityState.Unchanged, item.EntityState );
我有一種預感,您正在尋找的功能已在 EF 的下一個版本中公布。 有一個與實體關聯@mix 相關的完整主題。
或者您也可以嘗試從數據庫到實體的 map AuthorId 列。 (默認不是 map) 你不能 map 外鍵,所以你不能關聯一個 object 而不從 db 獲取一個。
編輯:這就是為什么我仍在使用提供此功能的 linq2sql。
EF 尚不完全支持此功能,我必須執行以下操作:
var post = new Post { Id=Guid.NewId(), AuthorReference.EntityKey = new EntityKey("Authors", "Id", authorIdValue) };
entities.AddToPost(post);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.