如何使用带有 Dommel 和 FluentMap 的 Dapper 将记录插入没有 Key 的 table?

How to use Dapper with Dommel and FluentMap to Insert a record into a table that doesn't have an Key?

我正在 API 中创建一个使用 Dapper with Dommel and FluentMap 的服务。 数据库是 Microsoft SQL Server。 我有一个端点需要将记录插入到没有密钥的 table 中。 table 在下面的实体中描述如下:

public class MyTable
{ 
    public int SomeProperty{ get; set; }
    public int AnotherProperty{ get; set; }
}

这个table在数据库中只有这两列。没有钥匙。

我想将 Dapper 与 Dommel 一起使用,如果可能的话,在此 table 中插入一条记录。

我已经创建并注册了地图,一切都很好并且适用于其他 table 拥有密钥的人。但是这个没有。

每次调用 Dommel InsertAsync 方法时,我都会收到以下错误消息:

fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware4 An unhandled exception has occurred while executing the request. System.InvalidOperationException: Could not find the key properties for type 'MyProject.Models.MyTable'.

A 已经知道可以仅使用 Dapper 并手动创建 SQL 查询和 execute it .

我在问是否有 Dommel 的解决方案。

提前致谢。

您需要指定一个密钥。 ORM 需要键,以便它们知道要插入、删除或更新哪一行。没有密钥,ORM 根本不可能工作。 Dommel 不是 SQL 生成器,它可以与 Dapper 一起使用,因此它 需要 键。

无论如何 class 确实有键 - 这是一个带有组合键的多对多 table。 Dommel 识别可用于指定复合键的 Key 属性。

在 Dommel 的单元测试中,ProductsCategories class 用于表示与组合键的多对多关系:

public class ProductsCategories
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ProductId { get; set; }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int CategoryId { get; set; }
}