DapperContrib - 使用抽象类更新

Posted

技术标签:

【中文标题】DapperContrib - 使用抽象类更新【英文标题】:DapperContrib - Update using Abstract Class 【发布时间】:2018-02-11 19:18:25 【问题描述】:

我有这样的贝司课:

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 的 Key 也应该有效?

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

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

M.

【问题讨论】:

【参考方案1】:

所以是的,只要我使用 Dapper Key 注释与 ComponentModel,它就可以很好地与抽象类一起使用。

Dapper Key 可能仅受支持。但那将是另一个问题。

M.

【讨论】:

以上是关于DapperContrib - 使用抽象类更新的主要内容,如果未能解决你的问题,请参考以下文章

Java面试题|接口和抽象类有什么区别?

django 抽象模型与常规继承

Java面试题|抽象类必须要有抽象方法吗?

抽象类中嵌套接口

Java面试题集锦(持续更新)

Java:Effective java学习笔记之 接口优于抽象类