OrmLite站点的OrmLite示例将无法编译/工作 - >代码优先客户&订单示例

时间:2013-12-12 02:24:07

标签: c# wpf extension-methods ormlite-servicestack

在此网站上: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包和示例启动并运行,但事实证明这是灾难性的。

我在这里缺少什么?

1 个答案:

答案 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);

以下是more examples showcasing OrmLite's new API's