【问题标题】:Entity Framework returns 0 items实体框架返回 0 项
【发布时间】:2015-07-25 15:50:31
【问题描述】:

我正在使用实体框架 6.1.3。

当我尝试从数据库表中获取值时,它返回 0 个项目,但在数据库中是 9 行。

而 Entity FrameWork 调用 OnModelCreating 方法。

我搜索了所有互联网,但没有找到解决方法。

我的 DbContext 类

namespace TestTask.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class Entities : DbContext
    {
        public Entities()
            : base("MenuItemsContainer")
        { }

        protected override void OnModelCreating(DbModelBuilder modelBuilder) 
        { 

        modelBuilder.Properties() 
                    .Where(p => p.Name == "Id") 
                    .Configure(p => p.IsKey()); 
        } 

        public virtual DbSet<DataMenuItemSet> DataMenuItemSet { get; set; }
        public virtual DbSet<ItemsSet> ItemsSet { get; set; }
    }
}

我的 DataMenuItemSet 类

using System.ComponentModel.DataAnnotations;

namespace TestTask.Models
{
    using System;
    using System.Collections.Generic;

    public partial class DataMenuItemSet
    {
        public DataMenuItemSet()
        {
            this.ItemsSet = new HashSet<ItemsSet>();
        }

        [Key]
        public int Id { get; set; }
        public bool IsRoot { get; set; }
        public string Name { get; set; }
        public Nullable<int> Parent { get; set; }

        public virtual ICollection<ItemsSet> ItemsSet { get; set; }
    }
}

所有这些都是使用实体框架生成的。

我需要从数据库中获取值。

更新

我已经解决了这个问题。

关键是我的解决方案中有两个项目。首先是一个站点,它具有来自数据库的模型,其次是简单的 ConsoleApplication,我尝试在其中测试数据库数据。当我尝试从其他应用程序通过 dbcontext 连接到 db 时,它无法按上述方式工作。为了使它工作,我将一个连接字符串从具有 edmx 模型和 dbcontext 的网站应用程序传输到我正在测试此连接和数据的应用程序。

这是它的工作原理

黄色 - ConsoleApplication 红色 - 带有模型和 dbcontext 的网站

这是一个模型和 Web.config 我将连接字符串从 Web.config 转移到 ConsoleApplication 的 App.cofig 和模型中。

带有传输模型和连接字符串的控制台应用程序。

毕竟它对我有用。

谢谢你的帮助!!!

【问题讨论】:

  • context.TableName.toList()
  • 最初生成上下文时使用了哪些选项?例如。先空代码,先从设计器建模,等等。你能发布你的连接字符串吗?
  • 我从数据库生成模型。连接字符串:'metadata=res://*/Models.DataMenuItems.csdl|res://*/Models.DataMenuItems.ssdl|res://*/Models.DataMenuItems.msl;provider=System.Data.SqlClient;提供者连接字符串="数据源=(LocalDB)\v11.0;集成安全=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient'
  • 您将在尝试部署 LocalDB 时遇到麻烦。您可能想要安装 mssql express 并将其设置为 vs 中的默认值。您也可以尝试使用 DataMenuItemSet 类型的模型实例。那应该允许您执行以下操作: application.Models.DataMenuItemSet dmis = new application.Models.DataMenuItemSet();字符串 myvar = dmis.Name;
  • 您使用什么代码来尝试从数据库中获取行?您在问题中所拥有的只是自动生成的代码,使您能够访问数据库。我没有看到任何实际查询数据库的内容。

标签: c# entity-framework-6


【解决方案1】:

这是使用实体框架和 LINQ 查询从 db 获取数据的非常常见的方法。

using (var context = new Entities())
{
    var L2EQuery = from item in context.DataMenuItemSet
                   where item.IsRoot == true
                   select item;

    var result = L2EQuery.ToList()<DataMenuItemSet>;
 }

希望对您有所帮助。

【讨论】:

  • 我试过这个。但它仍然返回我 0 个元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2019-12-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多