我已经创建了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设计师,没有更新的概念模型。 我怎么去呢?
首先,要了解你的问题,你需要知道的是,在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实体,运行“从数据库更新模式”应该不会覆盖所有设置的继承!
就个人而言,我会打开EDMX文件作为XML和发现问题的节点,并删除它。 该文件是很容易理解 - 不要害怕至少尝试一下。
只有手工编辑工作了我的项目视图。 (从SMALLINT将十进制(18,2))
在文本编辑器中.edmx文件,找到appropite部分,并手动更改属性类型=“...”值。
我知道我有点晚了,但这里有一个相对简单的生成您波苏斯/更新从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; }
一旦你更新Db的领域,找到相应的文件model.cs然后删除从模型中这些字段。 现在更新EDMX文件(更新型号从数据库)。 它为我工作。