【发布时间】:2017-02-08 03:37:15
【问题描述】:
我有一个使用实体框架的项目,代码优先。我想使用 LINQPad 来播种我的数据库。
要在使用 Entity Framework 进行迁移操作期间为数据库播种,我使用 AddOrUpdate() 扩展方法:
context.Rule.AddOrUpdate(
y => y.Id,
new Rule() { Id = Guid.Parse("b9b4fc65-fd0b-4f7f-aa27-3147c7665d27"), ... },
new Rule() { Id = Guid.Parse("66d27186-8be4-4ce2-8a74-737576e7157b"), ... }
);
当我尝试对 LINQPad 执行相同操作时,出现错误:
Rules.AddOrUpdate(
y => y.Id,
new Rules() { Id = Guid.Parse("b9b4fc65-fd0b-4f7f-aa27-3147c7665d27"), ... },
new Rules() { Id = Guid.Parse("66d27186-8be4-4ce2-8a74-737576e7157b"), ... }
);
我收到此错误:
CS1929“表”不包含“AddOrUpdate”的定义,并且最佳扩展方法重载“DbSetMigrationsExtensions.AddOrUpdate(IDbSet, params Rules[])”需要“IDbSet”类型的接收器
为什么 LINQPad 看不到这个扩展方法?我已经添加了对 EntityFramework 的 NuGet 引用,并在 NuGet 包管理器和 LINQPad 的命名空间导入中添加了所有命名空间。
我尝试编写类似这样的代码:
System.Data.Entity.Migrations.DbSetMigrationsExtensions.AddOrUpdate(
Rules as System.Data.Entity.IDbSet<Rules>,
y => y.Id,
new Rules() { Id = Guid.Parse("b9b4fc65-fd0b-4f7f-aa27-3147c7665d27"), ... },
new Rules() { Id = Guid.Parse("66d27186-8be4-4ce2-8a74-737576e7157b"), ... }
);
但我收到此错误:
CS0039 无法通过引用转换、装箱转换、拆箱转换将类型“System.Data.Linq.Table
”转换为“System.Data.Entity.IDbSet ” , wrapping 转换, 或者 null 类型转换
所以我猜扩展方法不起作用,因为我的 Rules 对象的类型不正确。似乎 LINQPad 使用自己的对象类型,我无法转换它。
【问题讨论】:
-
在您的连接中,您使用的是
Build data context automatically选项而不是Use a typed data context from your own assembly吗?
标签: c# entity-framework linqpad