2011-05-10 55 views
7

我一直在寻找这个奇怪的错误几个小时,但没有找到任何东西。我有一个非常简单的实体:实体框架代码优先:更新SetInitializer抛出异常

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'

请问,有人有线索吗?我正在使用实体框架4.1(CTP5)

+0

终于有了提示。我的数据库上下文位于类库项目中,而Global.asax当然是在MVC3 Web应用程序中。将整个数据库逻辑移动到相同的MVC3 Web应用程序解决了这个问题。那么为什么它不在类库中工作呢? – user825887

+3

F * ck这个,小时后解决。结果发现库类使用4.0.0和Web应用程序4.0.1。射击我。 – user825887

+3

先生,你刚好救了我几个小时,把头撞到桌子上。把你的答案,我立即upvote它。 – Andrey

回答

2

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

0

如果您正在使用Web.config(而不是Global.asax)和多个项目文件(例如我通常在ASP.NET MVC a中创建一个[Projectname] .WebUI,它包含MVC文件和一个[ 项目名]。域这是一个包含数据逻辑类库),那么你需要下面的代码在您的解决方案添加到所有的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项目合并。

相关问题