EF RenameColumn参数anonymousArguments在c#中不支持lambda,但在VB.Net中支持(无法将lambda表达式转换为object类型)

EF RenameColumn参数anonymousArguments在c#中不支持lambda,但在VB.Net中支持(无法将lambda表达式转换为object类型),c#,vb.net,entity-framework,lambda,C#,Vb.net,Entity Framework,Lambda,在VB.Net中,我可以这样调整我的迁移(重命名属性时执行AddColumn和DropColumn操作): RenameColumn("dbo.InvoiceLines", "Invoice_InvoiceID", "OrderId", Function(d) d.Int(nullable:=False)) 在c#中,当我调整我的方法(而不是AddColumn和DropColumn)时,我尝试使用以下方法: RenameColumn("dbo.InvoiceLines", "Invoice_

在VB.Net中,我可以这样调整我的迁移(重命名属性时执行AddColumn和DropColumn操作):

 RenameColumn("dbo.InvoiceLines", "Invoice_InvoiceID", "OrderId", Function(d) d.Int(nullable:=False))
在c#中,当我调整我的方法(而不是AddColumn和DropColumn)时,我尝试使用以下方法:

RenameColumn("dbo.InvoiceLines", "Invoice_InvoiceID", "OrderId",  c => c.Int(nullable: false));
但它给了我以下错误:

Cannot convert lambda expression to type object because it is not a delegate type

你知道怎么解决这个问题吗?看起来它在C#中不受支持(不确定)。我正在使用SqlServer提供程序这是我在codeplex上收到的答案:

--来自罗文

RenameColumn方法不使用函数指定列的类型(因为它只是重命名,不更改数据类型等)。下面是调用RenameColumn的正确方法


顺便说一句,这在VB.NET上编译的原因是编译器将您的函数隐藏在可选的anonymousArguments参数中,我们的所有迁移API都使用该参数(用于自定义迁移管道)。C#编译器对允许放入这种匿名类型的内容有更严格的限制。

要更改列的类型,您需要
AlterColumn()
而不是
RenameColumn()
在过去,我可以在VB.Net中使用RenameColumn,而不必触摸AlterColumn。它是同一个实体框架版本,所以我想知道为什么它不工作。此外,我有400多个迁移,其中许多迁移使用RenameColumn。。因此,我更喜欢一个不需要大量手工工作的解决方案+这似乎是一个有趣的问题。因为用Lambda表达式创建对象(匿名参数)很奇怪