您好我開發了一個使用SQL Compact和EF4的C#預算應用程序,我通過VS2010實體數據模型創建了EF模型。這一切都很好。不過,我正在考慮開發iPhone應用程序來支持現金交易,並認爲在兩個平臺上都支持後端數據庫會更好。在創建SQLite數據庫並創建一個新模型後,當我嘗試通過模型中的導航屬性訪問引用的數據時遇到了問題。當試圖顯示被引用表的屬性時,我得到一個NullReferenceException。實體框架,SQLite和延遲加載
當使用下面的代碼,我得到最後一行除外:
BudgetEntities budget = new BudgetEntities();
var accounts = budget.BankAccounts.ToList();
foreach (BankAccount a in accounts)
{
Console.WriteLine("Name:" + a.Description);
Console.WriteLine("Number:" + a.AccountNumber);
Console.WriteLine("Type:" + a.BankAccountType.AccountType); //Exception occurs here.
}
奇怪的是,該異常不會在這個例子中發生。我不確定發生了什麼事?
BudgetEntities budget = new BudgetEntities();
var accoutTypes = budget.BankAccountTypes;
var account = new BankAccount();
account.ID = Guid.NewGuid();
account.AccountTypeID = accoutTypes.First(t => t.AccountType.StartsWith("Credit")).ID;
account.BSB = "3434";
account.AccountNumber = "32323";
account.Description = "Test";
account.TrackingAccount = true;
budget.AddObject("BankAccounts", account);
budget.SaveChanges();
var accounts = budget.BankAccounts.ToList();
foreach (BankAccount a in accounts)
{
Console.WriteLine("Name:" + a.Description);
Console.WriteLine("Number:" + a.AccountNumber);
Console.WriteLine("Type:" + a.BankAccountType.AccountType); //Exception doesn't happen.
}
這只是一個簡單的例子,我知道我可以通過添加.INCLUDE(「BankAccountTypes」),以查詢解決它,但是我有一個是被創建對象,其中包括從引用的性質相當複雜的其他查詢在查詢中的對象,我不太清楚如何解決這個問題。
編輯: 在項目之間休息後,我已經回到這個問題,我終於解決了我的問題。它與代碼無關。這是與數據。我已經通過轉儲和加載將SQL Compact數據庫轉換爲SQLite,並且我的Guid列數據的語法錯誤。我插入GUID作爲「7cee3e1c-7a2b-462d-8c3d-82dd6ae62fb4」時,它應該是x'7cee3e1c7a2b462d8c3d82dd6ae62fb4'
希望我拉出過這個問題的工作將重新長出頭髮:)
謝謝每個人都爲你輸入。
這兩個示例在哪裏運行?網絡服務器?控制檯程序?當你在同一個地方運行兩個例子會發生什麼? – tzerb
這兩個示例運行在一個簡單的控制檯應用程序中,以嘗試確定發生了什麼。 – ruskie