2011-06-08 154 views
8

我工作的EF代码第一个网站,我已经写了我的课和上下文类的来源是:EF代码首先不产生表

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.Entity; 
using MySite.SalesTool.Data.Entities; 
using System.Data.Entity.ModelConfiguration.Conventions; 


namespace MySite.SalesTool.Data 
{ 
    public class SalesToolEntities : DbContext 
    { 
     public DbSet<User> Users { get; set; } 
     public DbSet<UserRole> UserRoles { get; set; } 
     public DbSet<Job> Jobs { get; set; } 
     public DbSet<JobAssigner> JobAssigners { get; set; } 
     public DbSet<JobFile> JobFiles { get; set; } 
     public DbSet<JobStatus> JobStatuses { get; set; } 
     public DbSet<AssignedUser> AssignedUsers { get; set; } 
    } 
} 

该项目构建罚款,但是当我去运行该站点时,数据库中没有创建任何表,并且我得到一个错误,指出数据库无法找到我尝试访问的任何上下文对象,可能是因为代码首先没有生成任何必要的表。

任何想法为什么它根本不会生成任何表格,并且不给我任何类型的错误信息?

+0

在web中。配置你应该命名您的连接字符串完全像您的上下文类 – 2011-06-08 15:43:38

+0

如何生成数据库? EF不会单独创建表--EF总是必须创建整个数据库。 – 2011-06-08 15:44:26

+0

这实际上取决于。如果是SQLCe,那么它会自行创建它 – 2011-06-08 15:46:06

回答

7

你有初始化策略吗?

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

从你订阅它听起来就像你自己创建了数据库。那么你需要指定一个初始化策略,否则没有表/数据将被添加到数据库中,查询数据库将导致一个异常:{“指定的表不存在。[sometable]”}

+0

现货!这解决了问题。谢谢。 – Tim 2011-06-08 22:01:54

+0

这行是否必须包含在global.asax文件或试图用测试数据创建新表的初始化文件中?即时通讯使用EF6并试图创建一些表中的一些测试数据,数据库正在创建,但没有任何表。 – KBriz 2014-04-28 19:18:07

+0

在global.asax中。你应该提交一个新的问题,而不是提交一个答案和一个问题:你会得到更快的方式。 – 2014-04-30 11:52:13