实体框架代码第一个db表不在现有数据库上生成

时间:2013-01-04 21:21:59

标签: c# entity-framework entity-framework-4.1

您好我是第一次使用Entity框架代码而我在生成表时遇到了问题。我在我的AppC中在MVC3应用程序中创建了一个空数据库。 这是我创建的模型:

 public class Brand {
    public int BrandId { get;set; }
    public string BrandName { get;set; }
}

public class Model
{
    public int ModelId { get;set; }
    public Brand BrandId { get;set; }
    public Category CategoryId { get;set; }
    public string ModelName { get;set; }
}

public class Category
{
    public int CategoryId { get;set; }
    public string CategoryName { get;set; }
}

这是dbContext:

public class CarsEntities : DbContext{
    public DbSet<Brand> Brands { get;set; }
    public DbSet<Model> Models { get;set; }
    public DbSet<Category> Categories {get;set;} 
}

这是web.config中的connectionString:

<connectionStrings>
      <add name="CarsEntities" connectionString="Data Source='D:\Projects IDE\Visual Studio\MyWork\Websites\SellCars\SellCars\App_Data\Cars.sdf'" providerName="System.Data.SqlClient" />      
 </connectionStrings>

现在我在HomeController中初始化了CarsEntities,但似乎没有生成任何表。我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为问题来自你的

webcofig 

这里是你想将db用作mdf文件数据库文件之类的文件 特别是在dtasource

       `<add name="CarsEntities"  connectionString="data source=.\SQLEXPRESS; Integrated
 Security=SSPI;AttachDBFilename=|yourDirectoryDirectory|\thenameofyourdb.mdf;User
 Instance=true"  providerName="System.Data.SqlClient" /`>

答案 1 :(得分:1)

首先 - 由于您使用的是SQL Server Compact,因此需要更改提供程序名称以使用Compact而不是SQL Server:

<add name="CarsEntities" connectionString="Data Source='D:\Projects IDE\Visual Studio\MyWork\Websites\SellCars\SellCars\App_Data\Cars.sdf'" providerName="System.Data.SqlServerCe.4.0" />

接下来,您需要在某处的Application_Start代码中使用数据库初始化程序,它告诉实体框架是否要创建数据库表以及重新创建它们的频率。见这里:

http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm

http://msdn.microsoft.com/en-us/data/jj591621.aspx