Dapper.Contrib - "仅支持具有单个[Key]或[ExplicitKey]"的实体。

时间:2017-08-25 11:10:47

标签: c# dapper dapper-contrib

我在MVC5 c#环境中使用DapperDapper.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; }

...

1 个答案:

答案 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。