从sql数据库中删除列后如何更新模型
Posted
技术标签:
【中文标题】从sql数据库中删除列后如何更新模型【英文标题】:how to update model after droping coulmn from sql database 【发布时间】:2019-10-29 18:56:22 【问题描述】:我从数据库中删除了 catalog_filename 库,我看到了这个错误:
指定的架构无效。错误: 未加载关系“J_DBModel.FK__CATALOG_T__CATEG__41B8C09B”,因为“J_DBModel.CATALOG_TBL”类型不可用。 以下信息可能有助于解决先前的错误: 类型“Javad_New.Models.CATALOG_TBL”上不存在所需的属性“CATALOG_FILENAME”。
在我的模型中 catalog_filename 仍然存在。
public long CATALOG_ID get; set;
public Nullable<long> CATEGORY_FK get; set;
public string CATALOG_TITLE get; set;
public string CATALOG_DESC get; set;
public string CATALOG_CATEGORY get; set;
public Nullable<int> CATALOG_PAGENO get; set;
public Nullable<bool> CATALOG_RTL_FLAG get; set;
public string CATALOG_FILENAME get; set;
public Nullable<System.DateTime> CATALOG_DATE get; set;
public virtual CATEGORY_TBL CATEGORY_TBL get; set;
【问题讨论】:
【参考方案1】:Make changes to the database
第一步是对数据库进行必要的更改。在此示例中,唯一的更改是列名。很简单。请务必注意,如果您有任何依赖于该列名的存储过程等,也应该更新这些。
-
打开 .edmx 文件
模型作为 .edmx 文件存在于您的项目中。打开解决方案资源管理器 (ctrl + alt + L) 并在顶部的搜索栏中键入 .edmx。您的模型应该出现(它是唯一具有该扩展名的模型)。打开它,你会看到一个连接表的图表。
-
从模型中删除旧表
在更新模型之前,有必要从模型中删除您更改的表的现有版本。在 .edmx 中,右键单击表之间的区域并选择模型浏览器。它将打开模型中包含的所有表的文件树。删除您在数据库中更改的表的每个实例。我发现在模型浏览器顶部的搜索栏中输入修改表的名称很有帮助,它将显示模型中具有该名称的所有表。删除它们!请注意,在不首先删除旧表的情况下尝试从数据库更新模型不会真正更新模型,并且您的应用可能无法正确编译。
-
从数据库更新模型
现在您的旧表已删除,右键单击 .edmx 并选择从数据库更新模型。您将看到以下屏幕:
【讨论】:
【参考方案2】:在代码优先模式中,sql 中从不(删除/更改)。 你应该从迁移中管理事情 在您的情况下,只需从 sql 向表中添加列,然后从 c# 类中删除并添加新的迁移
【讨论】:
以上是关于从sql数据库中删除列后如何更新模型的主要内容,如果未能解决你的问题,请参考以下文章
添加新的可空列后,是不是需要更新某个表上的每个 C# SQL 查询?
如何使用 Hibernate 从 Sql 数据库中更新、删除对象?