您不能在自己的帖子上投票 0
您好。
我正在开发这个(http://arg-co.com/SabteNam%20-%20Copy.zip)windows应用程序,对于我的DAL,我使用Entity Framework。但是每个扩展都有自己的EntityTypeConfiguration,所以我决定使用[Import]和[Export]将它们添加到我的DbContext的OnModelCreating方法中。这里的问题是,在'SabteNamDbContext'类中,它位于'SabteNamDataAccess'库中,'_Configs'没有初始化,所以我不能迭代它并将其项添加到'modelBuilder.Configurations'。
在'SampleConfiguration'类的源代码中,我注释掉'[Export(typeof(IDbConfiguration))]',但即使取消注释这部分代码,也不会导致应用程序正常工作。
有趣的是,如果我在'Main'窗体中使用以下代码,'_Configs'将被初始化:
[ImportMany(typeof(IDbConfiguration))]
public IEnumerable<EntityTypeConfiguration<object>> _Configs { get; set; }
如何解决这个问题?
答案 0 :(得分:2)
虽然我意识到这可能对您不再有用,但我们在this model from OdeToCode上使用了一个变体,我建议您阅读。
在我们的例子中,我们为扩展创建了一个接口,不仅仅是像Scott那样的实体配置,它不仅允许我们加载配置,还允许每个扩展加载工厂和测试数据,添加新的权限核心应用程序的类型等。
我们的OnModelCreating看起来像这样:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// load core object mappings
modelBuilder.Configurations.Add(new UserConfiguration());
modelBuilder.Configurations.Add(new PermissionConfiguration());
// get plugin assemblies
var catalog = new DirectoryCatalog("bin");
var container = new CompositionContainer(catalog);
container.ComposeParts();
var plugins = container.GetExportedValues<IPlugin>();
// load plugin object mappings
foreach (IPlugin plugin in plugins)
{
plugin.RegisterDomainEntities(modelBuilder.Configurations);
}
base.OnModelCreating(modelBuilder);
}