c# - 如何使用 c# 在数据库优先方法中拥有审计列?
问题描述
我需要为我的 MVC 项目(Web 应用程序)中的所有表添加审计列(创建者、创建者、修改者和修改者)。我想有一个包含这 4 列的基类并继承所有其他类。但我使用的是 Database-First 方法,因此 EF 生成了所有类。我不确定如何添加审计列和基类继承。
解决方案
我假设不可能先通过 EF 数据库执行您想要的操作。但是为了将特定字段添加到数据库的所有表中,您可以对 Sql Server 中的每个字段使用以下代码,然后更新您的 EF 模型。
DECLARE @TableName VARCHAR(100)
DECLARE @TableSchema VARCHAR(100)
DECLARE @COLUMN_NAME VARCHAR(50)
SET @COLUMN_NAME='CreatedOn'
DECLARE @COLUMN_DATATYPE VARCHAR(50)
SET @COLUMN_DATATYPE='DateTime'
DECLARE CUR CURSOR FOR
SELECT TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
OPEN CUR
FETCH NEXT FROM CUR INTO @TableSchema,@TableName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @SQL NVARCHAR(MAX)
SET @SQL=NULL
IF NOT EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=@TableName AND COLUMN_NAME = @COLUMN_NAME and Table_Schema=@TableSchema)
BEGIN
SET @SQL='ALTER TABLE '+ @TableSchema+'.'+ @TableName +' ADD '+ @COLUMN_NAME + ' '+ @COLUMN_DATATYPE
PRINT @SQL
EXEC(@SQL)
END
IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=@TableName AND COLUMN_NAME=@COLUMN_NAME and Table_Schema=@TableSchema)
BEGIN
PRINT 'Column Already exists in Table'
END
FETCH NEXT FROM CUR INTO @TableSchema,@TableName
END
CLOSE CUR
DEALLOCATE CUR
推荐阅读
- c++ - 如何用四元数来描述超过 360 度的旋转角度?
- spring-boot - Springboot抛出给杰克逊异常
- azure-functions - 发生错误发送事件:Azure 函数输出适配器未能将事件写入 Azure 函数作为流分析作业输出
- python - 用于获取数千条记录并将其附加到 falsk rest api 列表的高效 pymongo 查询
- ansible - 使用 ansible 在远程位置备份文件
- c# - 创建剪贴板数据以在 Access-Vbe 中使用
- hibernate - 如何在休眠中使用条件查询获取详细信息
- django - 使用 simplejwt 模块在 django 中修改 jwt 访问令牌到期时间
- php - 在 Woocommerce 3+ 中自定义一些结帐字段属性
- c# - 在 C# MVC 中执行的 OCTAVE .m 文件