我正在使用Web部署首先使用EF5代码部署MVC4应用程序.我创建了一个名为"development"的发布配置文件,它使用"执行代码优先迁移"复选框对应用程序和数据库进行Web部署,以便在应用程序启动时运行迁移.出版工作有一段时间了.在某些时候,我添加了一个名为"test"的新发布配置文件,以部署到另一台服务器,该服务器使用部署的ftp方法而不进行自动迁移.这也很好.但是,当我再次尝试使用旧的"开发"发布配置文件时,VS会自动将设置更改为dbDacFx方式("更新数据库"复选框而不是"执行代码优先迁移"),我无法将其恢复为它的方式.使用"测试"时,项目还有一些其他变化 配置文件,但在我看来,没有任何东西可以导致这一点.有谁知道为什么VS认为我的项目不再使用代码了?
我想调用一个需要这样的参数的方法:
Expression<Func<sometype, 'a>> expr
Run Code Online (Sandbox Code Playgroud)
我需要在运行时构造这个参数,因为我不知道之前的匿名类型是什么样的; 它可以有任何数量的字段:
x => new { a=x.a, b=x.b, c=x.c, etc... }
Run Code Online (Sandbox Code Playgroud)
我可以在运行时创建一个类型具有相同的'签名'(这是正确的单词吗?)作为所需的匿名类型,但问题是:如何在运行时从那个构造这个lambda表达式?特别是Expression.New是烦我的,因为我需要传递一个构造函数信息给它,我必须从一个现有的类型(它确实可以是一个匿名类型,但我不能在运行时创建一个匿名类型.或者在那里一种方法吗?).
更新(评论中要求的一些上下文)
我想调用的方法是:
DependentNavigationPropertyConfiguration.HasForeignKey<TKey>(Expression<Func<TDependentEntityType, TKey>> foreignKeyExpression)
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是自动为从某个基类继承的实体创建一个导航属性,包括该外键中该基类的键.因为实体可以有多个任何类型的键字段,所以TKey类型只在运行时才为我所知.
c# reflection entity-framework anonymous-types expression-trees