DapperContrib - 使用抽象类更新

时间:2018-02-11 19:18:25

标签: orm dapper dapper-contrib

我有这样的低音课:

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 Insert / Update / Get fails with message "Entity must have at least one [Key] property"

我发现使用Key [Dapper.Contrib.Extensions.Key]可以解决问题。虽然来自ystem.ComponentModel.DataAnnotations的密钥似乎也可以工作?

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

现在尝试再次分解课程,看看是否至少解决了这个问题。

微米。

1 个答案:

答案 0 :(得分:0)

所以,只要我使用Dapper Key注释与ComponentModel,它就可以与抽象类一起工作。

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

微米。