如何强制实体框架 6 生成与其相应数据库列大小相当的参数



我为一个表创建了一个数据库优先的 EDM,其中包含使用始终加密加密的列。我们的业务禁止直接访问表,因此我也使用存储过程进行所有数据库访问。

当我尝试插入行时,出现以下错误:

System.Data.SqlClient.SqlException: Operand type clash: varchar(8000( 加密方式为 (encryption_type = "随机", encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'XXXXXX', column_encryption_key_database_name = 'XXXXXX'( collation_name = 'SQL_Latin1_General_CP1_CI_AS' 与 varchar(60( 不兼容 加密方式为 (encryption_type = "随机", encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'XXXXXX', column_encryption_key_database_name = 'XXXXXX'( collation_name = 'SQL_Latin1_General_CP1_CI_AS

存储过程参数声明为 varchar(60(,它与表定义匹配。

因为我使用的是始终加密,所以参数定义必须与列定义匹配。但是,EF 为此属性生成声明为 varchar(8000( 的参数,这违反了加密协定。

有没有办法强制EF使用声明的参数长度?

已解决,请参阅此处的说明。在此特定方案中,EDM 包含存储过程的两个定义:一个在 StorageModels 元素中,另一个在 ConceptualModels 元素中。在存储模型定义中设置 MaxLength 属性可以解决此问题。

相关内容

  • 没有找到相关文章

最新更新