Dapper Extension Get&更新返回错误

时间:2016-09-05 14:59:39

标签: dapper dapper-extensions

我尝试使用Dapper Extension& MS Access在一定程度上取得了成功。我的代码如下所示。所有功能都正常工作(插入/计数/取消列表/删除),除了Get&更新。我总结了下面的代码。如果有人想要我可以粘贴所有代码

我的产品类

public class Products
{
    public string ProductNumber { get; set; }
    public string Description { get; set; }
}

在我的班级。我试着获得产品并更新如下。 con.Get<Products>函数返回“Sequence包含多个元素”消息的异常,con.Update<Products>返回的异常“必须至少定义一个Key列”< / em>的。

        using (var con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"))
        {

            string ProductNumber = "12";
            var product4 = con.Get<Products>(ProductNumber);
            product4.ProductNumber = "Baz";
            con.Update<Products>(product4);   

            Console.ReadLine();
        }

即使con.Get<Products>失败con.GetList<Products>(predicate)也能正常运作。 I did follow this link for setup

1 个答案:

答案 0 :(得分:2)

如果DapperExtensions无法从您的类中推断出名为ID的关键属性,则需要通过class mapper明确指定一个属性。假设ProductNumber是数据库中的主键,以下示例类映射器应将ProductNumber设置为DapperExtensions的主键。

using Dapper;   
using DapperExtensions;
using DapperExtensions.Mapper;
public class ProductsMapper : ClassMapper<Products>
{
    public ProductsMapper()
    {
        Map(x => x.ProductNumber).Key(KeyType.Assigned);
        AutoMap();
    }
}

此类可以与代码的其余部分位于同一个程序集中的某个位置。 Dapper Extensions会自动捡起它。如果您将类和Dapper代码放在单独的程序集中,则可以使用以下行将其指向映射器:

DapperExtensions.DapperExtensions.SetMappingAssemblies({ typeof(ProductsMapper).Assembly })