WPF实体无法创建视图的ObjectSet?

5

我已经在实体模型中添加了一个数据库视图。现在我正在尝试将ObjectSet放入我的ObjectContext中,以便在应用程序中访问该视图。

对于常规表格,我的ObjectSet看起来像这样:

private ObjectSet<StarVendor> _StarVendor;
public ObjectSet<StarVendor> StarVendor
{
    get
    {
        if ((_StarVendor == null))
        {
            _StarVendor = base.CreateObjectSet<StarVendor>("Stratus_X_TestEntities.StarVendors");
        }
         return _StarVendor;
    }
}

所以我也对我的视图做了同样的操作:
private ObjectSet<CatalogItemSearch> _CatalogItemSearch;
public ObjectSet<CatalogItemSearch> CatalogItemSearch
{
    get
    {
        if ((_CatalogItemSearch == null))
        {
            _CatalogItemSearch = base.CreateObjectSet<CatalogItemSearch>("Stratus_X_TestEntities.CatalogItemSearch");
        }
        return _CatalogItemSearch;
    }
}

但是当代码运行时,我遇到了一个异常:

System.InvalidOperationException "无法找到 EntitySet 名称 'Stratus_X_TestEntities.CatalogItemSearch'"

我知道对于视图,我不需要 ObjectSet 提供的添加/更新/删除功能。
是否有其他的集合类型适用于此?
或者这个错误与其是视图无关的东西有关?
谢谢。

我理解这是Code First方法? - StepUp
视图使用“从数据库更新模型”功能被拉入.edmx中。我找不到一个有用的.tt文件来生成我的ObjectContext,所以那部分是手写的。因此,就我理解的“代码优先”而言,它并不完全属于这一类别。 - Shaboboo
我所说的“view”是指数据库视图;你知道,而不是普通的表格?据我所知,它应该可以工作... 我曾经在Silverlight中编写实体,我曾经知道如何使用RIA使一切正常,但当我不得不转换到WPF时,实体就不能像以前那样工作了... 希望Martin建议使用更高版本可以解决所有问题。 - Shaboboo
2个回答

2
我想指出,ObjectSet API和ObjectContext API是Entity Framework的旧API,通常今天已不再使用。

它是Entity Framework 4.0的一部分,那是很久以前的事了(参见Wikipedia:Entity Framework history)。

在2011年,发布了Entity Framework版本4.1,并建议从现在开始改用DbSetDbContext API。 Entity Framework的当前生产就绪版本是版本6,版本7正在开发中。

我建议您转移到Entity Framework 6,可以使用Nuget将其安装到您的Visual Studio项目中:EntityFramework 6.1.3
这里有一篇文章,其中有一章介绍了DbSet API相对于旧API带来的差异。请查看“介绍DbContext和DbSet”这一章节。

我给你提供了奖励,因为这个答案到目前为止是最有帮助的。我设法将我的代码移动到EF 6,但现在不是一个集合不起作用,而是没有一个集合起作用。同样的错误。我希望那个错误消息不要那么模糊,有那么多可能的原因! - Shaboboo
也许你可以发一个新问题,这次使用 DbSet 并指出你正在使用 EF 6。 - Martin

1
如果您正在使用CodeFirst,您可以像映射表(使用DbSet)一样映射视图,然后它应该工作。

使用“从数据库更新模型”函数将视图拉入到.edmx中,没有错误。我在正确的属性上设置了键。在DbContext中,生成了一个dbSet<>,就像所有其他表一样。 为了查询数据,我有一个ObjectContext和每个实体都有一个ObjectSet<>。这就是我遇到问题的地方;base.CreateObjectSet<CatalogItemSearch>(“Stratus_X_TestEntities.CatalogItemSearch”);会抛出异常。 - Shaboboo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接