2

我尝试使用 Dapper Extension 和 MS Access 并在一定程度上取得了成功。我的代码在下面列出。除获取和更新外,所有功能都正常工作(插入/计数/获取列表/删除)。我总结了下面的代码。如果有人愿意,我可以在这里粘贴所有代码

我的产品类别

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

在我的主要课程中。我尝试获取该产品并按如下方式对其进行更新。con.Get<Products>函数返回带有 “序列包含多个元素”消息con.Update<Products>的异常,并返回带有“必须定义至少一个键列”的异常。

        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)能完美运行。我确实按照此链接进行设置

4

1 回答 1

4

如果 DapperExtensions 无法从您的类中推断出名为 ID 的关键属性,则您需要通过类映射器显式指定一个。假设 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 })
于 2016-09-06T14:05:44.220 回答