2011-12-16 3 views
0

새 Entity Framework에서 코드 첫 번째 접근 방식으로 작업하려고했지만 데이터베이스의 테이블이 자동으로 만들어지지 않았습니다.코드 EF에서 첫 번째 접근 방식이 작동하지 않습니다.

나는 (App_Code 폴더에) 이미 데이터베이스를 생성했으며 코드 첫 번째 접근 방식을 사용합니다. 설명해주세요. 먼저 DB에 테이블을 만들어야합니다. 그렇지 않으면 테이블을 자동으로 만들어야합니까?

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" 

클래스 (모델 폴더에) 내 객체를 설명하는

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 : 아래

내가이 연결 문자열이의 Web.config에서 내 프로젝트

에 대한 설명입니다 클래스 (모델 폴더 내)

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

데이터베이스에 새로운 (&) 레코드 (테이블이 존재하지 않음)를 삽입하려고하는 컨트롤러에서.

예외 정보 : System.Data.SqlClient.SqlException : 잘못된 개체 이름 'dbo.UserProfiles'나는 예외가 SaveChanges()를 호출하기 위해 노력하고있어

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(); 

.

+0

두 연결 문자열을 모두 제거하십시오. 사실 그것은 자동으로 데이터베이스를 생성해야합니다. –

+0

그러나 이미 데이터베이스에 테이블 및 데이터가 포함되어 있고 코드가있는 다른 테이블을 추가하는 방법이 있습니까? 이 방법은 효과가 없었습니까? – Pavel

+0

UserProfiles 테이블을 수동으로 생성하면 모든 Ok와 새로운 레코드가 삽입됩니다. 하지만 나는 코드 우선을 원해. :) – Pavel

답변

1

내장 EF 데이터베이스 초기화 데이터베이스 및 데이터베이스의 모든 테이블을 만들어야합니다 - 기존의 데이터베이스와 함께 작동 할 수 없습니다하지만 당신은 create tables in existing database 할 수 있습니다 자신의 이니셜을 구축 할 수 있습니다.

코드 생성 첫 번째 코드는 현재 데이터베이스 초기화 프로그램이 기존 테이블을 변경할 수 없으므로 필요한만큼 여러 번 데이터베이스를 삭제하고 다시 만들 수 있기를 기대하고 있습니다. 이는 매우 유망한 Migrations으로 해결할 예정입니다.

관련 문제