2012-01-04 148 views
2

我一直在玩弄這個想法幾天,但我找不到任何明確的證據表明這將會或不會工作。LinqPad + EF 4.1 + SQL Server CE

我想要做的就是使用LinqPad查詢在與查詢相同的目錄(可能與查詢命名相同)中創建一個帶有SQL Server CE支持的EF 4.1代碼優先數據庫。原因是爲了快速建立一個數據庫來存儲查詢結果以便進一步處理。

的想法是存儲在查詢中的類定義,即(這些將與最新的測試查詢工作

public class User 
{ 
    public long Id { get; set; } 
    public string Name{ get; set; } 
} 

public class MyDBContext : DbContext 
{ 
    // note the overloaded constructor 
    // just pass in the LinqPad UserQuery connection 
    public MyDBContext(DbConnection connection) : base(connection, true) 
    {} 
    public DbSet<User> Users { get; set; } 
} 

然後:

#define NONEST 
public Main() 
{ 
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDBContext>()); 
    // pass in the current database connection to point EF to the right database 
    var context = new MyDBContext(this.Connection); 
    context.Users.Add(new User(){Name = "Test User"}); 
    context.SaveChanges(); 

    context.Users.Dump("Contents of Users table"); 
} 

我引用的EntityFramework 4.2 .0.0在LinqPad中,但在我的查詢中,我看不到System.Data.Entity命名空間。這是否表示有其他問題?

我不確定是否給出了enoug h環境或信息,所以讓我知道你是否需要澄清。這可以做到嗎? LinqPad不支持這個嗎?

更新:

看來,EF不能映射嵌套類,這正是LinqPad查詢中定義的類。我在這方面並不是很有經驗,但似乎我已經陷入死衚衕。除非Joe Albahari能夠以某種方式實現非嵌套用戶類,否則它看起來不會起作用。任何人有想法?

最後更新:

使用latest beta,這全部工作。它需要事先創建.sdf數據庫文件,但所有其他操作都應該可以工作。很酷。感謝Joe Albahari!

+0

我仍然不確定發生了什麼,但我能夠解決EF DLL和命名空間問題。我目前正致力於讓查詢級別類被EF Code-First成功使用。 – llaughlin 2012-01-05 02:07:16

+0

我即將做一個可以讓你定義非內置類的構建。敬請期待... – 2012-01-05 09:46:07

回答

3

下載the latest beta,然後添加下面的指令到您的查詢的開始:

#define NONEST 

這將告訴LINQPad移動您定義的級別了,所以他們非嵌套類型。

+0

哇,那很快!我會看看它並相應地更新。謝謝! – llaughlin 2012-01-07 19:53:08