我在MVC5 c#环境中使用Dapper
和Dapper.Contrib
,有时(!)部署生产网站时出现错误说明:
GetAll<T>
仅支持单个[Key]或[ExplicitKey] 的实体 物业在 Dapper.Contrib.Extensions.SqlMapperExtensions.GetSingleKey [T](字符串 方法)at Dapper.Contrib.Extensions.SqlMapperExtensions.GetAllAsync [T](的IDbConnection 连接,IDbTransaction事务,Nullable`1 commandTimeout)
这只发生在每三个部署一次。
我怀疑Dapper.Contrib
会自动注意到我的主键,因为它名为&#34; Id&#34; ,但我&#39;用[ExplicitKey]
(它是一个GUID)来装饰它,也许这些属性会发生冲突。也许它完全不同......
关于如何解决这个问题的任何想法,除了可能重命名我的主键?
有问题的模型中的一块:
[Table("Tasks")]
public class TasksModel
{
[ExplicitKey]
public Guid Id { get; set; }
...
答案 0 :(得分:0)
我认为这与属性名称“ id”有关。当没有[Key]属性的属性时,以下内容来自Dapper/SqlMapperExtensions.cs中的KeyCache构建代码。
var idProp = allProperties.Find(p => string.Equals(p.Name, "id", StringComparison.CurrentCultureIgnoreCase));
在您的情况下,您将同时获得一个ExplicitKey(通过在模型中用[ExplicitKey]装饰您的密钥)和一个Key(默认情况下,此属性称为Id)。除非您可以更改数据库列名,否则我将使用常规的Dapper。