【问题标题】:Entity Framework Not Generating Classes for Tables or Procedures实体框架不为表或过程生成类
【发布时间】:2015-02-17 22:13:40
【问题描述】:

我正在使用实体框架在 C# 中生成我需要与 SQL 服务器交互的类和函数。

作为参考,这是我的一张表:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Area](
    [ID] [bigint] identity (1, 1) primary key,
    [Name] [nvarchar](100) NOT NULL
    )
GO

运行实体数据模型向导(使用“数据库中的 EF 设计器”)后,我的项目有 edmx 文件和一些新的 .cs 文件,但它似乎没有生成所需的一切。

例如,在我的 DatabaseEntities 类中,我有:

    public virtual DbSet<Area> Areas { get; set; }

但是,“区域”类型(以及其他三种缺失类型)没有定义。我也缺少存储过程的功能。

我尝试删除新文件并重新运行模型向导,但结果相同。

还有其他人遇到过这种情况吗?

旁注:

我注意到在最近几次尝试中,当向导运行时我也遇到了错误:“实体框架包未安装在项目中”。但是,当我点击它时,它仍在生成 edmx 和 model.context。

我在 Entity Framework 6.0.0 和 6.1.2 版本中都遇到了同样的问题。

重新安装框架对问题没有影响。

更新:

卸载 nuget 并重新安装最新版本允许我通过 nuget 安装 EntityFramework 而不会出错。但是,现在“添加新项”对话框中缺少 ADO.NET 数据模型。

【问题讨论】:

  • 如果您从现有数据库执行 CodeFirst,您将不会获得任意存储的 procs 或 tvfs,因为 CodeFirst 本身不支持它们。
  • 对于存储过程,您可能需要添加下两行: SET FMTONLY OFF SET NOCOUNT ON 在对话框中,您可以创建复杂类型。建议再次删除 FMTONLY ON。对于表格,您可以显示表格定义吗?
  • @Pawel:我正在使用数据库中的 EF 设计器。
  • 实际模型看起来好吗? Area 实体在里面吗?
  • @dudeNumber4:在 edmx 模型中,我在图表上看到了我的所有四个表。

标签: c# sql-server entity-framework ado.net-entity-data-model


【解决方案1】:

确保表有一个键列。如果表中没有键列,则不会生成视图。

【讨论】:

    【解决方案2】:

    我所做的工作涉及多个步骤,我必须对在问题下方发表评论的人表示赞赏。

    1)我卸载了 nuget 包管理器并重新安装了最新版本(显然我的不是新鲜的)。这让我可以通过 nugget 安装 EntityFramework,没有错误或回滚消息。

    2) 我不确定这是否有帮助,但我还通过 Microsoft 的网站重新安装了 Visual Studio 的实体框架工具。我仍然不确定是否有必要同时拥有两者。

    3) 添加新项目对话框中似乎缺少 ADO.NET 实体数据模型模板。选择“添加 -> 组件”而不是“添加 -> 新项目”后,它神秘地出现在两个列表下。

    完成后,我可以运行 EF 设计器并且生成的所有内容都没有问题。

    【讨论】:

      【解决方案3】:

      确保您的列名不是保留字,例如数据类型或关键字;今天我在尝试导入一个表时遇到了一个问题,该表的列有人简单地称为“DATE”,这显然是一种数据类型,并且搞砸了 EF。当我在 SQL 中创建视图并使用未保留的名称为列命名时,表导入得很好并生成了所有必需的类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        相关资源
        最近更新 更多