我想達到以下使用實體框架4.0和自跟蹤實體:如何在服務器端創建和存儲(自我跟蹤)實體對象?
1)客戶端應用程序請求書提供的ISBN號碼
2)形成的服務器來執行一個查詢在其數據庫上查看該書是否已經存在
3a)如果該書在數據庫中,則返回該書。
3B)如果這本書是不是在數據庫中,它將查詢亞馬遜信息,提取所需的屬性,創建一個新的書,它存儲在數據庫中,並返回給客戶端
現在, 3b)是問題所在......我無法找到有關如何在服務器端創建實體對象(書籍)的任何信息,將它添加到上下文中並將其存儲在數據庫中。我嘗試了各種各樣的東西:
public class BookBrowserService : IBookBrowserService {
public Book GetBook(string ISBN) {
using (var ctx = new BookBrowserModelContainer()) {
Book book = ctx.Books.Where(b => b.ISBN == ISBN).SingleOrDefault();
if (book == null) {
book = new Book();
book.ISBN = ISBN; // This is the key
book.Title = "This title would be retrieved from Amazon";
Author author = new Author();
author.Name = "The author's name would be retrieved from Amazon";
book.Authors.Add(author);
ctx.Books.AddObject(book);
ctx.SaveChanges(); // This one always throws an exception...
}
return book;
}
}
}
有誰能告訴我我做錯了什麼嗎? 看起來問題與EDMX模型有關。
我有一個圖書實體和一個作者實體,具有多對多的關係。
圖書實體的密鑰是ISBN,它是最大長度爲13的字符串。 StoreGeneratedPattern設置爲無。
作者實體的密鑰是Id,這是一個Guid。 StoreGeneratedPattern是Identity。
異常消息是: 「不能將NULL值插入列‘ID’,表‘BookBrowser.dbo.Authors’;列不允許空INSERT失敗的語句已終止。」
但由於StoreGeneratedPattern設置爲Identity,是否不應自動創建Id值?
謝謝, 彼得
實際上,服務器可以使用StoreGeneratedPattern = Identity生成ID。在一個較早的以db-first爲首的項目中,這很好。但在我目前的代碼優先項目中,我遇到了同樣的問題。 – HiredMind 2011-12-16 18:41:54