讀取裏面我已經創建了一個標準的Windows控制檯應用程序內英鎊數據庫,然後我加入了該數據庫文件作爲WP7的應用程序內的資源。我發現數據庫讀取代碼在訪問LazyValue.Value成員時導致ArgumentNullException。英鎊數據庫不會WP7應用
這裏的數據庫創建代碼,但不包括模型「地點」。
public class TestDatabaseInstance : BaseDatabaseInstance
{
public override string Name
{
get
{
return "TestDatabase";
}
}
protected override List<ITableDefinition> RegisterTables()
{
return new List<ITableDefinition>
{
CreateTableDefinition<Venue, int>(x=>x.VenueId)
};
}
}
class Program
{
static void Main(string[] args)
{
//CreateData();
LoadData();
}
private static void CreateData()
{
using (SterlingEngine engine = new SterlingEngine())
{
engine.Activate();
var databaseInstance = engine.SterlingDatabase.RegisterDatabase<TestDatabaseInstance>();
for (int i = 100; i < 1000; i++)
{
var venue = new Venue();
venue.Name = "test";
venue.AddressLine1 = "this is an address";
venue.VenueId = i;
var key = databaseInstance.Save<Venue>(venue);
}
FileStream fs = File.Open("c:\\myvenuedata.dat", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Write);
using (var binaryWriter = new BinaryWriter(fs))
{
engine.SterlingDatabase.Backup<TestDatabaseInstance>(binaryWriter);
}
databaseInstance = null;
}
}
private static void LoadData()
{
SterlingEngine engine = new SterlingEngine();
var fs = File.Open("c:\\myvenuedata.dat", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
engine.Activate();
var databaseInstance = engine.SterlingDatabase.RegisterDatabase<TestDatabaseInstance>();
engine.SterlingDatabase.Restore<TestDatabaseInstance>(new BinaryReader(fs));
engine.Dispose();
engine = new SterlingEngine();
engine.Activate();
// THIS LINE WORKS FINE IN MY CONSOLE APP
databaseInstance.Query<Venue, int>().ForEach(x => Console.WriteLine(x.LazyValue.Value.Name));
}
}
然後,如果我把等價代碼的WP7應用程序內:
SterlingEngine engine = new SterlingEngine();
StreamResourceInfo sri = Application.GetResourceStream(new Uri("/SterlingDBReader;component/myvenuedata.dat", UriKind.RelativeOrAbsolute));
var fs = sri.Stream;
engine.Activate();
var databaseInstance = engine.SterlingDatabase.RegisterDatabase<TestDatabaseInstance>();
engine.SterlingDatabase.Restore<TestDatabaseInstance>(new BinaryReader(fs));
engine.Dispose();
engine = new SterlingEngine();
engine.Activate();
// **Errors with ArgumentNullException here because x.LazyValue.Value IS NULL.**
databaseInstance.Query<Venue, int>().ForEach(x => Debug.WriteLine(x.LazyValue.Value.Name));
唯一的區別是
- 讀者WP7應用程序的父命名空間是控制檯不同應用
- 這是一個WP7應用程序從一個控制檯應用程序創建的數據文件中讀取
- 它加載從獨立存儲中的數據文件作爲資源
任何想法? 感謝 克里斯
嗨,謝謝你的幫助。我無法創建Silverlight 3項目來創建該文件,因爲Sterling需要SL4。我無法使用Silverlight 4項目,因爲它與WP7不兼容。有任何想法嗎?! – krisdyson 2011-06-07 11:48:14
哦,沒關係!我把*模型放在一個單獨的SL3組件中,它工作的很好!謝謝 – krisdyson 2011-06-07 11:57:30