簡體   English   中英

當實體框架具有已存在的外鍵 object 時,如何將 object 添加到實體框架中

[英]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 業務對象,它們從數據庫中提取,然后轉換為我的業務層。 我不想重新拉它們,因為我可以在我的業務層進行修改。 所以我只想附加對象。

我不想保留數據對象,我將它們拉出並將它們轉換為業務對象,然后在我想推回數據庫並將業務對象轉換為數據對象之前不要再次觸摸它們。

您不應該首先從數據庫中檢索作者記錄,以便能夠在 Post object 中設置它嗎?

所以你會得到:

var author = Author.Select(a => a.Id).FirstOrDefault();
var post = new Post { Id=Guid.NewId(), Author=author };
entities.AddToPosts(obj);

也許您可以使用AttachAttachTo ObjectContext 來附加 object,但在 MSDN 庫中沒有提到是否執行對數據庫的查詢。 通過一些跟蹤,您可以檢查是否發生了數據庫查詢。

可以模擬“知名”實體,而無需訪問數據庫。 新建實體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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM