我試圖創建生成自動化目的的SQL遷移腳本控制檯應用程序 - 所產生的同一個腳本:如何通過反射來引用另一個項目中的EF配置?
更新,數據庫-Script
從軟件包管理器控制檯。
在我創建了,如果我直接引用的DLL有我的DBMigrationsConfiguration它我可以生成腳本的控制檯應用程序。
例如這個工程:
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.IO;
using TAPS.Infrastructure.Migrations;
namespace msg
{
class Program
{
static void Main(string[] args)
{
var migrator = new DbMigrator(new Configuration());
var scriptor = new MigratorScriptingDecorator(migrator);
var sql = scriptor.ScriptUpdate(null, null);
File.WriteAllText(@"c:\script.sql", sql);
}
}
}
請注意,我有一個直接引用的DLL,using語句,我用一個新的語句來實例化配置對象。
現在,如果我嘗試通過反射來做到這一點,我回去空從線路:
DbMigrationsConfiguration configuration = (DbMigrationsConfiguration)assembly.CreateInstance("TAPS.Infrastructure.Migrations, Configuration");
完整的代碼示例如下,我試圖得到通過反射工作:
using System;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.IO;
using System.Reflection;
namespace msg
{
class Program
{
static void Main(string[] args)
{
Assembly assembly = AppDomain.CurrentDomain.Load(File.ReadAllBytes(@"C:\DLLPath\TAPS.Infrastructure.dll"));
DbMigrationsConfiguration configuration = (DbMigrationsConfiguration)assembly.CreateInstance("TAPS.Infrastructure.Migrations, Configuration");
var migrator = new DbMigrator(configuration);
var scriptor = new MigratorScriptingDecorator(migrator);
var sql = scriptor.ScriptUpdate(null, null);
File.WriteAllText(@"c:\script.sql", sql);
}
}
}
配置變量返回爲空。
刪除你的屏幕捕獲和直接複製粘貼在這裏你的代碼,請。 – CodeNotFound
CodeNotFound - 我試圖顯示添加DLL引用,但我繼續並拿出屏幕截圖並添加了代碼。 –