-1

在插入期间,进程错误并出现无效名称错误。Dapper 正在尝试使表名复数。

映射器类与模型在同一个命名空间中,以表命名,模型缺少任何其他注释,一个简单的 POCO。

  //record is an instance of DMPERQ.cs
  var rqId = conn.Insert<DMPERQ>(record);

错误:

  Invalid object name 'DMPERQs'

映射器类:

   public class DMPERQMapper: ClassMapper<DMPERQ>
   {

        public DMPERQMapper(){
           Table("DMPERQ");
           Map(m => m.RQID).Column("RQID").Key(KeyType.Identity);
           AutoMap();
        }

    }
4

1 回答 1

1

我认为的问题是您的自定义类映射器永远不会被调用。你可以设置一个断点,你会发现它永远不会到达。

我尝试这样做是因为 DapperExtensions 会自动创建一个以“id”结尾并且具有 int 类型的标识字段(即使它不是),然后从插入 sql 中排除该属性。如果数据库需要提供一个值,这会导致一个丑陋的 sql 错误。

我在具有两个外键的复合键但没有主标识键的复合表中遇到过这种情况。从技术上讲,这是你应该做这些类型的表的方式,但 DapperExtensions 根本不喜欢它。

问题是如何保护和附加对 ClassMapper 实例的引用,我在任何人的文档中都没有看到任何说明如何执行此操作的内容。

我最终修改了 DapperExtensions 以解决我遇到的问题,您可能也必须这样做。

长期问题是:如何将自定义映射附加到 DapperExtensions 以及将代码放在哪里?

一些解决方案表明放入 global.asax 文件,但这不起作用。

于 2015-11-16T17:05:20.633 回答