LinqPad + EF 4.1 + SQL Server CE

Posted

技术标签:

【中文标题】LinqPad + EF 4.1 + SQL Server CE【英文标题】: 【发布时间】:2012-01-04 16:28:02 【问题描述】:

几天来我一直在玩弄这个想法,但我找不到任何明确的证据表明这会或不会奏效。

我想要做的是使用 LinqPad 查询创建一个 EF 4.1 代码优先数据库,其中 SQL Server CE 支持与查询在同一目录中(可能与查询命名相同)。这样做的原因是为了快速建立一个数据库来存储查询结果以供进一步处理。

这个想法是将类定义存储在查询中,即(这些将适用于最新的测试版

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");

我在 LinqPad 中引用了 EntityFramework 4.2.0.0,但在我的查询中,我看不到 System.Data.Entity 命名空间。这是否表明存在其他问题?

我不确定我是否提供了足够的上下文或信息,所以如果您需要澄清,请告诉我。这可以做到吗? LinqPad 还不支持这个吗?

更新:

似乎 EF 无法映射嵌套类,这正是 LinqPad 查询定义的类。在这方面我不是很有经验,但似乎我已经走到了死胡同。除非 Joe Albahari 能够以某种方式实现非嵌套用户类,否则它看起来不会起作用。有人有想法吗?

最终更新:

使用latest beta,这完全有效。它需要事先创建.sdf 数据库文件,但所有其他操作都应该有效。很酷。谢谢乔·阿尔巴哈里!

【问题讨论】:

我仍然不确定发生了什么,但我能够解决 EF dll 和命名空间问题。我目前正在努力让 EF Code-First 成功使用查询级别的类。 我即将进行构建,让您定义非嵌套类。敬请期待…… 【参考方案1】:

下载the latest beta,然后将以下指令添加到查询的开头:

#define NONEST

这将告诉 LINQPad 将您定义的类型向上移动,以便它们是非嵌套的。

【讨论】:

哇,真快!我会看看它并相应地更新。谢谢!

以上是关于LinqPad + EF 4.1 + SQL Server CE的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.1 Code-First 项目上的 MvcMiniProfiler 不分析 SQL

Windows窗体应用程序中的连接字符串EF 4.1代码优先SQL紧凑

EF Core Linq-to-Sql GroupBy SelectMany 不适用于 SQL Server

是否可以将 LinqPad 与代码优先模型一起使用

LINQ/LinqPad:相同的查询不同的结果

linqpad - 大 NOT IN 子句超出限制 - 还有其他方式吗? - Linq to SQL