Mac*_*kan 7 c# dapper dapper-contrib
我正在使用Dapper和Dapper.Contrib在MVC5 c#环境中,有时(!)当我部署生产站点时,我得到错误说明:
GetAll<T>在Dapper.Contrib.Extensions.SqlMapperExtensions.GetAllAsync [T](IDbConnection连接,IDbTransaction)的Dapper.Contrib.Extensions.SqlMapperExtensions.GetSingleKey [T](String方法)中仅支持具有单个[Key]或[ExplicitKey]属性的实体transaction,Nullable`1 commandTimeout)
这只发生在每三个部署一次.
我怀疑它会以某种方式Dapper.Contrib自动注意到我的主键,因为它的名字是"Id",但我装饰它[ExplicitKey](它是一个GUID),也许这些属性会发生冲突.也许这是完全不同的东西......
关于如何解决这个问题的任何想法,除了可能重命名我的主键?
有问题的模型中的一块:
[Table("Tasks")]
public class TasksModel
{
[ExplicitKey]
public Guid Id { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
小智 1
我认为这与属性的名称“id”有关。以下来自Dapper/SqlMapperExtensions.cs中的 KeyCache 构建代码,当时没有带有 [Key] 属性的属性。
var idProp = allProperties.Find(p => string.Equals(p.Name, "id", StringComparison.CurrentCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您将获得一个 ExplicitKey (通过在模型中使用 [ExplicitKey] 装饰您的键)和一个 Key (默认情况下,此属性称为 Id)。除非您可以更改数据库列名称,否则我会使用常规 Dapper。