c# - 从表中删除
问题描述
我有一个旧的 C# 控制台应用程序,我目前正在升级它以首先使用实体框架(最新版本)代码。
我将在数据库中创建 20 多个表。
我的方法之一是
static void DeleteModelInDb(Model pdModel, ExporterContext db) {
string[] tables = new string[] { "PD_COLUMN", "PD_COLUMN_EXTENDED", "PD_COLUMNRULE", "PD_COLUMNSOURCE", "PD_DB_PACKAGE", "PD_DB_PACKAGE_PROC_PARAMETER", "PD_DB_PACKAGE_PROCEDURE", "PD_DB_PACKAGE_TYPE", "PD_DB_PACKAGE_VARIABLE", "PD_DIAGRAM", "PD_DIAGRAM_TABLE", "PD_DOMAIN", "PD_DOMAIN_VALUES", "PD_INDEX", "PD_INDEX_COLUMN", "PD_JOIN", "PD_MODEL", "PD_MODEL_EXTENDED", "PD_MODEL_CHANGES", "PD_MODELSOURCE", "PD_PACKAGE", "PD_REFERENCE", "PD_RULE", "PD_TABLE", "PD_TABLE_EXTENDED", "PD_TABLE_CHANGES", "PD_TABLE_KEY", "PD_TABLE_KEY_COLUMN", "PD_TABLESOURCE", "PD_VIEW", "PD_VIEWCOLUMN", "PD_VIEWSOURCE" };
SqlConnection con = new SqlConnection("definition of con...");
con.Open();
SqlCommand com = con.CreateCommand();
foreach (string table in tables)
{
com.CommandText = "DELETE FROM " + table + " WHERE MODEL_CODE = '" + pdModel.Code + "'";
com.ExecuteNonQuery();
}
com.Dispose();
}
我想使用实体框架做这样的事情。但是我不想为每个表都写这个删除代码。
var x = (from y in db.PdColumn
where y.ModelCode == pdModel.Code
select y).FirstOrDefault();
db.PdColumn.Remove(x);
db.SaveChanges();
有人可以帮忙吗?
解决方案
您应该能够通过让所有相关实体实现具有 ModelCode 属性的接口来抽象删除代码,然后创建一个通用的删除方法(我假设 ModelCode 是下面的字符串类型):
interface IEntityWithCode {
string ModelCode {get;}
}
void DeleteFromDbSet<T>(DBSet<T> dbset, string modelcode) where T: IEntityWithCode {
var x = (from y in dbset
where y.ModelCode == modelcode
select y).FirstOrDefault();
dbset.Remove(x);
}
由于 C# 不支持类的变化,我不认为你可以在你的新 DeleteModelInDb 方法中对一个数据库集列表进行循环而不诉诸讨厌的反射黑客,所以它必须看起来像这样
void DeleteModelInDb(YourDbContext context, string modelcode) {
DeleteFromDbSet(context.SomeTable, modelcode);
DeleteFromDbSet(context.SomeOtherTable, modelcode);
//and so on
}
(免责声明:代码未经测试,因为我没有 EF 核心设置方便的 ATM)
推荐阅读
- c# - 枚举类型的 TypeConverter 属性破坏了该类型的依赖属性
- java - 警告:renderImageWithDPI 时您没有关闭 PDF 文档循环
- c++ - 在 Qt 的 IF 语句中设置时间延迟
- c - C编程指针,为什么指针指向另一个指针会导致向后跟踪
- java - 确保实体具有非私有构造函数
- amazon-web-services - Ansible AWS 使用带有 ansible playbook 的 role_arn 未授予权限
- c - 用字符串作为输入用c编写计算器程序
- php - 如何排除字符串中的单字母标题大小写词?
- python - Python 错误:ImportError: DLL Load failed with psycopg2 on Python 3.7
- javascript - 所以我有一个问题,点击注册服务器加载用户/用户/注册....可能是什么问题?