实体框架代码优先:更新SetInitializer抛出异常

时间:2011-05-10 21:18:52

标签: entity-framework ef-code-first

我一直在寻找这个奇怪的错误几个小时但没找到任何东西。我有一个非常简单的实体:

public class Company {
    public Guid Id { get; set; }
    public string Name { get; set; }
}

以下是上下文:

public class MyDBContext : DbContext {

    public DbSet<Company> Companies { get; set; }

}

第一次运行时,一切正常。但是,当我更改实体时(例如,我为Id添加了[Key]属性),我得到了预期的“模型已更改”或出现错误。所以,我在Global.asax application_start中输入它:

Database.SetInitializer<MyDBContext>
(new DropCreateDatabaseIfModelChanges< MyDBContext >());

这是我被卡住的地方。没有编译错误,它编译时没有错误/警告。但是,当我运行我的项目时,我收到以下错误:

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.TypeLoadException: GenericArguments[0], 'MyDB.Data.MyDBContext', on 'System.Data.Entity.IDatabaseInitializer1[TContext]' violates the constraint of type parameter 'TContext'

拜托,有人有线索吗?我正在使用Entity Framework 4.1(CTP5)

2 个答案:

答案 0 :(得分:2)

对于未回答的问题拖网渔船,上面已经回答了这个问题。但从未标记过用户。见上面的评论。超过1K的意见!那是浪费了很多时间......所以我加了这个。

答案 1 :(得分:0)

如果您正在使用Web.config(而不是Global.asax)和多个项目文件(我通常在ASP.NET MVC中创建一个[ Projectname ]。包含MVC的WebUI文件和[项目名称]。域是一个包含数据逻辑的类库,然后您需要将以下代码添加到解决方案中的所有Web.config / App.config:

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

这对我有用,无需将我的Domain项目与WebUI项目合并。