POCO类在EF工作不正常(POCO Class in EF not working as Expe

2019-08-17 19:48发布

我已经创建了SQL数据库,并在Visual Studio 2012年它自动创建的POCO(TT)类创建一个EDMX。 一切看起来都很好。

现在,我更改表的列名。 我更新EDMX。 打开EDMX XML和一切都看起来不错。

问题1

之后,我在TT跑了自定义的工具,我看到了一个新的属性得到了另外创建的,例如:

SQL table name : Student

Column name : sName

在我的POCO类

public int sName{ get; set; }

得到自动创建。

现在我在SQL更改列名

Column name : studentName

我的POCO类

public int sName{ get; set; }

public int studentName{ get; set; }

这是一个错误或我需要做些什么来解决这个问题?

我应该怎么做才能避免这种情况?

问题2

另外,如果我改变任何SQL列的数据类型和更新从数据库模型在我的EDMX设计师,没有更新的概念模型。 我怎么去呢?

Answer 1:

首先,要了解你的问题,你需要知道的是,在EDMX文件只是包含3个不同部分的XML文件:

  • CSDL:概念架构定义语言
  • SSDL:存储架构定义语言
  • MSL:映射规范语言

该CSDL包含组成你的概念模型中的实体和关系。 该SSDL描述您的数据库模型和MSL是2之间的映射。

“更新模式从DB”的过程将更新SSDL(改变一切,这是与当前的DB模式不一致),它只会修改的情况下,你已经添加了新的东西,你的DB模式的CSDL。

这是一个非常正常的行为,因为你的概念模式可以/应该从你的DB模式不同(除非你想让你的域模型看起来就像这显然不健全的OOP / DDD最佳实践DB模式)。

至于@Peru,解决办法是删除有关实体(不是整个EDMX!),然后执行“更新模型从DB”的过程。

希望这可以帮助!

编辑:

有一个工具,而不是免费的,这是一个Visual Studio插件,允许应用制作成数据库的变化,无论在CSDL和SSDL文件: Huagati DBML / EDMX工具 。 唯一的“自由”解决方案是删除那些需要更新的实体(或本单位内的右场)。

请记住,CSDL应该由开发商来维护,必须看起来像一个对象模型,而不是一个DB模式。 想象一下,你有你的实体之间或您已经分手1和DB表2个EDMX实体,运行“从数据库更新模式”应该不会覆盖所有设置的继承!



Answer 2:

就个人而言,我会打开EDMX文件作为XML和发现问题的节点,并删除它。 该文件是很容易理解 - 不要害怕至少尝试一下。



Answer 3:

只有手工编辑工作了我的项目视图。 (从SMALLINT将十进制(18,2))

在文本编辑器中.edmx文件,找到appropite部分,并手动更改属性类型=“...”值。



Answer 4:

我知道我有点晚了,但这里一个相对简单的生成您波苏斯/更新从EDMX设计师你的DbContext方式。

去你的设计师,右键单击空白区域,单击“从数据库更新模式”,新增/更新表。 这将更新您的EDMX XML。 您确认您的表已经加入CSDL,SSDL和MSL段后,右键单击在Solution Explorer(你的T4模板<Name>.tt ,不是<Name>.Context.tt ),然后单击“运行自定义工具” - 这将产生波苏斯任何更新的对象。 请注意,如果您正在创建新的实体,他们将不会被添加到您的DbContext类,您仍然可以通过添加下面一行在你班上成绩最差的手动做到这一点: public virtual DbSet<Entity_Name_Goes_Here> EntityNames { get; set; } public virtual DbSet<Entity_Name_Goes_Here> EntityNames { get; set; }



Answer 5:

一旦你更新Db的领域,找到相应的文件model.cs然后删除从模型中这些字段。 现在更新EDMX文件(更新型号从数据库)。 它为我工作。



文章来源: POCO Class in EF not working as Expected