我正在使用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文件,取自新的新项目。
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列。我现在更迷失了。
[UPDATE3]尝试删除列,更新edmx模型,然后重新添加列。结果相同。某些原因实体框架只是讨厌名称&#34; upper_specification_limit&#34;和&#34; lower_specification_limit&#34;什么......
答案 0 :(得分:0)
解决了我的问题。我错了另一张表具有完全相同的数据类型...
解决方案是不使用无符号十进制数据类型(至少在MySQL中)。
将我的数据类型从无符号十进制更改为常规十进制,现在该列显示在我的.edmx文件中。也许在Entity Framework 6中有一个带有MySQL无符号小数的错误?无论如何,很高兴解决了我的问题。
[更新]看起来我不是第一个遇到此问题的人(Entity framework support for MySql unsigned decimal)。