2012-01-04 102 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