EF Code First CTP 5 和 SQL SErver 2008 R2
Posted
技术标签:
【中文标题】EF Code First CTP 5 和 SQL SErver 2008 R2【英文标题】:EF Code First CTP 5 and SQL SErver 2008 R2 【发布时间】:2011-02-18 20:36:04 【问题描述】:我似乎无法让 EF Code First 与 SQL Server 2008 R2 一起使用。我得到的错误是“无效的对象名称'dbo.Movies'。”
它不会自动创建表。
我的连接字符串:
<add name="MovieDBContext"
connectionString="Server=(local); Database=Movies; Trusted_Connection=true; Integrated Security=True"
providerName="System.Data.SqlClient" />
我的模型和上下文类:
public class Movie
public int ID get; set;
[Required(ErrorMessage = "Title is required")]
public string Title get; set;
[Required(ErrorMessage = "Date is required")]
public DateTime ReleaseDate get; set;
[Required(ErrorMessage = "Genre must be specified")]
public string Genre get; set;
[Required(ErrorMessage = "Price Required")]
[Range(1, 100, ErrorMessage = "Price must be between $1 and $100")]
public decimal Price get; set;
[StringLength(5)]
public string Rating get; set;
public class MovieDBContext : DbContext
public DbSet<Movie> Movies get; set;
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity<Movie>().Property(p => p.Price).HasPrecision(18, 2);
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:我忘记了它是否默认启用,但请尝试在您的 Application_Start
中设置它(很确定不是)
System.Data.Entity.Database.DbDatabase.SetInitializer<MovieDBContext>(new CreateDatabaseIfNotExists<MovieDBContext>());
【讨论】:
在我的 Application_Start 方法中不是这样,但它似乎没有让它工作。 检查表是否已经存在,如果它已经存在,那么您需要确保表名匹配。 (或删除表并让 EF 为您构建它)否则我们缺少上述方法,在 Application_Start 中调用时会起作用。 我回去重做了很多我遵循的教程+按照你的建议做了,现在可以了。干杯。【参考方案2】:这是我当前的设置(用您的详细信息替换大写):
<connectionStrings>
<add name="TITLEContext" connectionString="metadata=res://*/Models.TITLE.csdl|res://*/Models.TITLE.ssdl|res://*/Models.TITLE.msl;provider=System.Data.SqlClient;provider connection string="Data Source=DATASOURCE;Initial Catalog=DATABASE;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
然后我在 Public TITLEContext() 中跟进了这个
DbDatabase.SetInitializer(new DropCreateDatabaseIfModelChanges<TITLEContext>());
尝试了几次,但在其中一个负载上设置了一个断点并检查上下文的实体。它应该有一个选项来查看数据库连接字符串...
祝你好运!
【讨论】:
【参考方案3】:protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
希望对你有帮助
【讨论】:
以上是关于EF Code First CTP 5 和 SQL SErver 2008 R2的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework - CTP4 - Code First - 如何关闭自动复数?
获取安全异常 SQLCE 4、Code First CTP 5 和共享主机
从 EF 5 Code First 迁移生成完整的 SQL 脚本