2

Dapper Extension & MS Access で遊んでみましたが、ある程度成功しました。私のコードを以下に示します。Get & Update を除くすべての機能 (Insert/Count/GetList/Delete) は正常に機能します。以下にコードをまとめました。誰かが望むなら、ここにすべてのコードを貼り付けることができます

私の製品クラス

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

そして私のメインクラスで。以下のように製品を入手して更新しようとしました。con.Get<Products>関数は、 「シーケンスには複数の要素が含まれています」というメッセージでcon.Update<Products>例外を返し、「少なくとも 1 つのキー列を定義する必要があります」という例外を返します。

        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 に答える