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=&quot;Data Source=DATASOURCE;Initial Catalog=DATABASE;Integrated Security=True;MultipleActiveResultSets=True&quot;" 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的主要内容,如果未能解决你的问题,请参考以下文章

EF4 CTP5 Code First 方法忽略表属性

Entity Framework - CTP4 - Code First - 如何关闭自动复数?

获取安全异常 SQLCE 4、Code First CTP 5 和共享主机

从 EF 5 Code First 迁移生成完整的 SQL 脚本

使用 EF4 Code First 时如何控制生成的 nvarchar 列的长度?

忽略 Entity Framework 4.1 Code First 中的类属性