【问题标题】:Accessing / Using a View Entity Framework 6 Code First approach访问/使用视图实体框架 6 代码优先方法
【发布时间】:2014-08-03 00:28:06
【问题描述】:

我创建了一个 SQL Server 视图,它在其他表/实体上执行一些相当复杂的逻辑并公开一系列列。我想在实体框架代码优先方法中访问这个视图,当我看到 this 中的讨论时我刚刚创建了一个“FooView.cs”类并将其添加到我的 DbContext 类中的DbSet<FooView> 属性中。

     public class FooView
     {
      public string PartNumber { get; set; }
      public string PartType   { get; set; }
     }
     public class CatalogContext : DbContext
     {
       public DbSet<FooView> FooView { get; set; }
     }

但是当我运行我的代码时,我收到一条错误消息:EntityType 'FooView' has no key defined。定义此 EntityType 的键。

      CatalogContext _db = new CatalogContext();
      var l = _db.FooViews.Select(_ => _.PartNumber);

但我想要它做的就是从 DB dbo.FooView 访问我的视图

这个问题的更简单的解决方案是创建一个 EDMX 文件并访问视图,但我不想有 2 个 DB 上下文。

如果有人能帮助我,我将不胜感激,非常感谢。

【问题讨论】:

    标签: c# entity-framework ef-code-first


    【解决方案1】:

    您的问题正是错误消息所说的:实体框架无法确定 FooView 中的键是什么。要解决此问题,只需将 [Key] 属性添加到您的 PartNumber(如果这是唯一键):

    public class FooView
    {
        [Key]
        public string PartNumber { get; set; }
        public string PartType   { get; set; }
    }
    

    这应该可以解决您的问题。

    【讨论】:

    • 当我添加一个键并运行我的代码时,我得到这个消息“迁移已为上下文'CatalogContext'启用但数据库不存在或不包含映射表。使用迁移创建数据库及其表,例如通过从包管理器控制台运行“更新数据库”命令。”但是我的数据库中确实有一个同名的视图。我不明白为什么 EF 不能从 DB 中获取视图。
    • 在您的一个代码中有 _db.FooViews,在 db 上下文中有一个 DbSet FooView。当您说视图称为 dbo.FooView 时,您能否仔细检查上下文的属性是否命名为 FooView 并且视图是否为 dbo.FooView 因为这另一个错误表明 EF 无法将 DbSet... 与您的视图匹配。
    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多