EF中的Code First方法对我不起作用

时间:2011-12-16 06:45:07

标签: asp.net-mvc-3 entity-framework entity-framework-4.1

我尝试在新的Entity Framework中使用Code First方法,但不会自动创建数据库中的表。

我已经创建了数据库(在App_Code文件夹中),我使用Code First方法。请解释一下,我需要先在DB中创建表,还是应该自动创建表?

以下是我的项目的描述

在Web.config中我有2个连接字符串:

add name="ApplicationServices"
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
    providerName="System.Data.SqlClient"

add name="MyDB"
   connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI; AttachDBFilename=|DataDirectory|MyDB.mdf;User Instance=true"
   providerName="System.Data.SqlClient"

描述我的对象的类(在Model文件夹中)

public class UserProfile
{
        [Key]
        [Required]
        public string PhoneNumber { get; set; }

        [Required]
        public string FirstName { get; set; }

        [Required]
        public string MiddleName { get; set; }

        [Required]
        public string Surname { get; set; }

        [Required]
        public DateTime Birthday { get; set; }

        public int PositionId { get; set; }

        public string Boss { get; set; }

        [Required]
        public int CompanyId { get; set; }
}

DbContext类(在Model文件夹中)

public class MyDB : DbContext
{
    //public MyDB() : base("MyDB") { }
    public DbSet<UserProfile> UserProfiles { get; set; }
}

在Controller中尝试向数据库插入新的(&amp; first)记录(表尚不存在)。

UserProfile newProfile = new UserProfile();
newProfile.CompanyId = 1;
newProfile.PhoneNumber = model.PhoneNumber;
newProfile.FirstName = model.FirstName;
newProfile.MiddleName = model.MiddleName;
newProfile.Surname = model.Surname;
newProfile.Birthday = Convert.ToDateTime(model.Birthday);

var myDb = new Models.MyDB();
myDb.UserProfiles.Add(newProfile);
myDb.SaveChanges();

当我试图致电SaveChanges()时,我得到一个例外:

  

异常详细信息:System.Data.SqlClient.SqlException:无效的对象名称'dbo.UserProfiles'。

1 个答案:

答案 0 :(得分:1)

内置的EF数据库初始化程序必须创建数据库和数据库中的所有表 - 它不能与现有数据库一起使用,但您可以构建自己的初始化程序,它将能够create tables in existing database

首先使用数据库创建的代码当前希望您可以根据需要多次删除和重新创建数据库,因为没有数据库初始化程序支持更改现有表(这将由非常有希望的Migrations解决)。