Dapper.Contrib - "поддерживает только сущность с одним [Key] или [ExplicitKey]"

Я использую Dapper а также Dapper.Contrib в среде MVC5 C# и иногда (!) при развертывании рабочего сайта появляются ошибки, в которых говорится:

GetAll<T> поддерживает только сущность с единственным свойством [Key] или [ExplicitKey] в Dapper.Contrib.Extensions.SqlMapperExtensions.GetSingleKey[T](метод String) в Dapper.Contrib.Extensions.SqlMapperExtensions.GetAllAsync[T](соединение IDbConnection, IDbConnection, IDb транзакция, Nullable`1 commandTimeout)

Это происходит только примерно раз в три раза.

Я подозреваю, что как-то Dapper.Contrib автоматически замечает мой первичный ключ, так как он называется "Id", но я украсил его [ExplicitKey] (это GUID) и, возможно, эти атрибуты конфликтуют. Возможно, это что-то совершенно другое...

Любая идея о том, как обойти эту проблему, кроме, возможно, переименования моего первичного ключа?

Часть из рассматриваемой модели:

[Table("Tasks")]
public class TasksModel
{
    [ExplicitKey]
    public Guid Id { get; set; }

...

0 ответов

Я думаю, что это связано с названием свойства, "id". Ниже приведен код сборки KeyCache в Dapper / SqlMapperExtensions.cs, когда отсутствуют свойства с атрибутом [Key].

var idProp = allProperties.Find(p => string.Equals(p.Name, "id", StringComparison.CurrentCultureIgnoreCase));

В вашем случае вы получаете и ExplicitKey (путем украшения вашего ключа с помощью [ExplicitKey] в вашей модели), и ключ (по умолчанию, поскольку это свойство называется Id). Если вы не можете изменить имя столбца БД, я бы использовал обычный Dapper.

Другие вопросы по тегам