-1

我有一个这样的低音课:

public abstract class Document
{
[Dapper.Contrib.Extensions.Key]
public Int32 DoucmentID {get;set;}
public String Name {get;set;}
}

然后我有

public class Proposal : Document
{
   public String ProposalStuff {get;set;}
}

现在我想编写一些通用方法来使用 Dapper.Contrib 处理更新

//某处的某个类..

public bool Update<T> (T as item) where T : class
{
 using (var sqlConnection = new SqlConnection(_connectionString))
            {
                sqlConnection.Open();
                return sqlConnection.Update<T>(item);
            }
}

现在我想更新对象:

   public bool UpdateProposal(Repository.Proposal prop)
   {
            return orm.UpdateItem<Repository.Proposal>(prop);
   }

Dapper.Contrib 给了我这个信息:

{"实体必须至少有一个 [Key] 或 [ExplicitKey] 属性"}

我无法找到使用抽象基类的示例。我想也许 UpdateProposal 的类型应该是 Document 但我得到了相同的消息。

谢谢您的帮助。我相信这很简单。

编辑:我找到了一半的答案。我开始只使用一个类(没有抽象)进行测试并得到了同样的错误。经过进一步研究:

Dapper.SimpleCRUD 插入/更新/获取失败并显示消息“实体必须具有至少一个 [Key] 属性”

我发现使用 Key [Dapper.Contrib.Extensions.Key] 可以解决这个问题。似乎来自 ystem.ComponentModel.DataAnnotations 的 Key 也应该有效?

如果不是这样,那让我有点难过,因为任何想要使用 ORM 的服务都必须了解 Dapper,而我希望避免使用映射器。

不过,现在要尝试再次分解班级,看看是否至少可以解决眼前的问题。

M。

4

1 回答 1

0

所以是的,只要我使用 Dapper Key 注释与 ComponentModel,它就可以在抽象类中正常工作。

Dapper Key 可能只是受支持的。但这将是另一个问题。

M。

于 2018-02-11T20:10:34.950 回答