实体框架数据库第一列未在模型中显示

时间:2017-08-30 15:26:37

标签: c# mysql entity-framework

我正在使用Entity Framework 6.0连接到我的C#项目中的MySQL数据库。我在我现有的一个表中添加了一个新列并更新了我的edmx模型。但是,出于某种原因,该列未显示在edmx图表中,甚至未显示在表格的.cs文件中。

为了调试这个我试过以下......

1)删除整个图表,清理项目,然后从数据库更新模型并重新添加所有表格。

2)删除整个.edmx文件,清理项目,然后将新的实体数据模型重新添加到我的项目中。

3)从一个新的C#项目开始。

4)删除整个.edmx文件,删除整个数据库模式并重新创建,然后重新添加新的实体数据模型。

5)创建具有不同名称的新数据库模式并连接到新模式。

然而,所有这些导致了相同的结果 - 该列未显示在我的edmx文件中。我不明白为什么它没有被显示(特别是因为我尝试从一个新的项目开始......)。我尝试将列添加到其他表并更新模型,这些新列出现了。只是这一个表的模型无法正常工作。

这是创建表的SQL脚本。

DROP TABLE IF EXISTS part_revision;
CREATE TABLE part_revision (
    `id` SMALLINT UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
    `part_id` SMALLINT UNSIGNED NOT NULL,
    `name` VARCHAR(75) NOT NULL,
    `actual_gross` SMALLINT UNSIGNED NOT NULL,
    `upper_specification_limit` DECIMAL(11 , 6 ) UNSIGNED NOT NULL,
    `lower_specification_limit` DECIMAL(11 , 6 ) UNSIGNED NOT NULL,
    `control_plan_id` SMALLINT UNSIGNED DEFAULT NULL,
    `quality_plan_id` SMALLINT UNSIGNED DEFAULT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id` , `part_id`),
    FOREIGN KEY (`part_id`)
        REFERENCES part (`id`),
    FOREIGN KEY (`control_plan_id`)
        REFERENCES control_plan (`id`),
    FOREIGN KEY (`quality_plan_id`)
        REFERENCES quality_plan (`id`)
);

新列是upper_specification_limit和lower_specification_limit。

以下是生成的模型和.cs文件,取自新的新项目。

Model in .edmx diagram

namespace CBM1_HMI
{
    using System;
    using System.Collections.Generic;

    public partial class part_revision
    {
        public int id { get; set; }
        public int part_id { get; set; }
        public string name { get; set; }
        public int actual_gross { get; set; }
        public Nullable<int> control_plan_id { get; set; }
        public Nullable<int> quality_plan_id { get; set; }
        public Nullable<System.DateTime> created_at { get; set; }
        public Nullable<System.DateTime> updated_at { get; set; }

        public virtual control_plan control_plan { get; set; }
        public virtual part part { get; set; }
        public virtual quality_plan quality_plan { get; set; }
    }
}

[更新]我尝试使用其他名称重新创建数据库模式。但是,结果是一样的,所以我现在认为我的数据库有问题...但我不确定会出现什么问题,因为只有这个表有问题。我有另一个表与相同数据类型的列(DECIMAL(11,6)UNSIGNED NOT NULL),它工作正常。我读到旧版本的Entity Framework没有显示外键列。即使这不是固定的,这是一个普通的列而不是外键。

[UPDATE2]尝试向我的表添加一个新列并更新模型,新列显示(如下所示),但仍然缺少upper_specification_limit和lower_specification_limit列。我现在更迷失了。

Added Foo column to table

[UPDATE3]尝试删除列,更新edmx模型,然后重新添加列。结果相同。某些原因实体框架只是讨厌名称&#34; upper_specification_limit&#34;和&#34; lower_specification_limit&#34;什么......

1 个答案:

答案 0 :(得分:0)

解决了我的问题。我错了另一张表具有完全相同的数据类型...

解决方案是不使用无符号十进制数据类型(至少在MySQL中)。

将我的数据类型从无符号十进制更改为常规十进制,现在该列显示在我的.edmx文件中。也许在Entity Framework 6中有一个带有MySQL无符号小数的错误?无论如何,很高兴解决了我的问题。

[更新]看起来我不是第一个遇到此问题的人(Entity framework support for MySql unsigned decimal)。