使用Dapper.Plus BulkInsert报错:Invalid object name 'TimingDataApp'
Dapper.Plus BulkInsert 报错"Invalid object name 'TimingDataApp'"的解决办法
出现这个错误的核心原因是Dapper.Plus找不到对应的数据表,下面是几种常见的排查和解决方向:
表名与实体类名不匹配
Dapper.Plus默认会把实体类名TimingDataApp当作数据库表名,但如果你的数据库表实际是复数形式(比如TimingDataApps)、带前缀,或者名字不一致,就会找不到。
解决方式二选一:- 在实体类上加特性指定表名:
[Table("YourRealTableName", Schema = "dbo")] public class TimingDataApp { public int AppId { get; set; } public int SessionId { get; set; } public int Urgency { get; set; } public int AppSatusId { get; set; } } - 在BulkInsert时通过选项指定:
connection.BulkInsert(timingDataApp, opt => opt.TableName("YourRealTableName").Schema("dbo"));
- 在实体类上加特性指定表名:
连接的数据库不对
检查bulkDBConnectionString里的Initial Catalog(数据库名)是否正确,有可能你连接到了其他数据库,而目标表并不在这个库中。直接登录数据库确认目标表存在于连接字符串指定的库内。架构(Schema)不匹配
如果你的表不在默认的dbo架构下(比如在AppData这类自定义架构里),Dapper.Plus默认会去dbo架构下找表,自然找不到。解决方式同上,要么在特性里指定Schema,要么在BulkInsert选项里设置。数据库账号权限不足
极少数情况下,连接数据库的账号没有访问该表的权限,数据库会返回"找不到对象"的错误。可以用拥有管理员权限的账号测试,或者给当前账号添加该表的INSERT权限。
修改后的示例代码(用选项指定表名的方式):
//Create the List and add results List<TimingDataApp> timingDataApp = new List<TimingDataApp>(); foreach (var result in exercises) { timingDataApp.Add(new TimingDataApp() { AppId = result, SessionId = sessionKeyId, Urgency = 0, AppSatusId = 6 }); } //Bulk Insert the records using Dapper.Plus try { using (var connection = new SqlConnection(bulkDBConnectionString)) { // 指定实际表名和架构 connection.BulkInsert(timingDataApp, opt => opt.TableName("TimingDataApp").Schema("dbo")); } } catch (Exception ex) { // 可以在这里添加日志输出,方便排查 }
内容的提问来源于stack exchange,提问作者Frank M
相关产品推荐
相关产品推荐

