从样本中抓取这个:
protected override ObjectContext CreateDataSource()
{
NorthwindContext nw = new NorthwindContext();
// Configure DbContext before we provide it to the
// data services runtime.
nw.Configuration.ValidateOnSaveEnabled = false;
// Get the underlying ObjectContext for the DbContext.
var context = ((IObjectContextAdapter)nw).ObjectContext;
// Return the underlying context.
return context;
}
将其修改为使用我项目中的DbContext类。
编辑:澄清我正在从DbContext类进行投射,就像示例一样:
public class NorthwindContext : DbContext
{
// Use the constructor to target a specific named connection string
public NorthwindContext()
: base("name=NorthwindEntities")
{
// Disable proxy creation as this messes up the data service.
this.Configuration.ProxyCreationEnabled = false;
// Create Northwind if it doesn't already exist.
this.Database.CreateIfNotExists();
}
运行代码会在投射DbContext的行上出错:
无法将“MyProject.MyDbContext”类型的对象强制转换为“System.Data.Entity.Infrastructure.IObjectContextAdapter”。
尽管DbContext实现了IObjectContextAdapter:
public class DbContext : IDisposable, IObjectContextAdapter
我在SO和其他谷歌上找到了几个问题,但我找不到任何解决方案。
我正在使用Entity Framework 4.2,尝试更新到4.3 beta,我不确定是否卡住了。
总体目标是将WCF中的数据作为DataService提供。
更新:深入挖掘我发现我的DbContext(来自EntityFramework.dll)和WCF项目中的类型(来自Microsoft.data.Entity.CTP)之间存在歧义问题
不确定如何从这里得到我想要的东西......
答案 0 :(得分:0)
提醒一下,问题在于EntityFramework.dll和Microsoft.Data.Entity.CTP之间存在歧义,导致我的DbContext丢失的DataInitializer失去了功能。
我在这里更换了我的初始化程序解决了这个问题:
public class MyDataInitializer : RecreateDatabaseIfModelChanges<MyData>
{
public void Seed(MyData context)
要:
public class MyDataInitializer : IDatabaseInitializer<MyData>
{
public void InitializeDatabase(MyData context)
我现在可以访问我的DataService。
只有一个