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 - 使用抽象类更新的主要内容,如果未能解决你的问题,请参考以下文章