在此网站上:https://github.com/ServiceStack/ServiceStack.OrmLite
我已经开始了一个新项目并使用Nuget来安装Ormlite SQL Server软件包。然后,我尝试将“POCO上复杂类型的代码优先客户和订单示例”作为文本blob复制/粘贴到我的项目中。
当我尝试编译时,我得到大量错误,我不知道为什么。该示例未显示需要哪些using语句,但这是我最终添加的内容:
using ServiceStack.DataAnnotations;
using ServiceStack.OrmLite;
using ServiceStack.OrmLite.SqlServer;
using System.Data;
所以出现的第一个问题是找不到dbCmd.DropTable的扩展方法,所以我将其更改为dbConn。这似乎不对,为什么我需要在下载网页上的主要示例中更改它?:
//Non-intrusive: All extension methods hang off System.Data.* interfaces
IDbConnection dbConn = dbFactory.OpenDbConnection();
IDbCommand dbCmd = dbConn.CreateCommand();
//Re-Create all table schemas:
dbConn.DropTable<OrderDetail>();
现在我遇到了一个我无法弄清楚如何解决的问题。这一行(以及其他):
var customerId = dbCmd.GetLastInsertId(); //Get Auto Inserted Id
抛出异常:
错误1'System.Data.IDbCommand'不包含'GetLastInsertId'的定义,并且没有可以找到接受类型'System.Data.IDbCommand'的第一个参数的扩展方法'GetLastInsertId'(你是否错过了使用指令或程序集引用?)C:\ wsDAC \ OrmLiteTest \ OrmLiteTest \ MainWindow.xaml.cs 89 36 OrmLiteTest
但是这行在编译时没有错误(我使用对象资源管理器跟踪了该函数并添加了它以查看会发生什么):
ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider.Instance.GetLastInsertId(dbCmd);
我认为通过这个框架,我可以使用Nuget包和示例启动并运行,但事实证明这是灾难性的。
我在这里缺少什么?
答案 0 :(得分:2)
您可能正在使用刚刚发布的v4 of ServiceStack 中断发布,其中包含需要额外开发工作才能升级的重大更改。
以下是NuGet instructions to remain on ServiceStack V3。
在 v4 中,db.Save()会自动填充AutoIncrement Id,例如:
db.Save(customer);
customer.Id //populated with the auto-incremented id
否则,您可以使用以下方法选择最后一个插入ID:
var customerId = db.Insert(customer, selectIdentity:true);