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紧凑