2013-01-16 2 views
0

먼저 Entityframework 코드를 사용하여 ASP.NET MVC 4 앱을 구현하려고합니다. 실제로 2 데이터 컨텍스트, 사용자 지정 및 기본 UsersContext 있습니다.EntityFramework 코드 우선 마이그레이션

namespace Namespace.Models 
{ 
    public class StoreDB : DbContext 
    { 
     public DbSet<Supplier> Suppliers { get; set; } 
     public DbSet<Vendor> Vendors { get; set; } 
     public DbSet<Product> Products { get; set; } 
    } 
} 

public class UsersContext : DbContext 
{ 
    public UsersContext() : base("StoreDB") 
    { 
    } 

    public DbSet<UserProfile> UserProfiles { get; set; } 
} 

아마 문 public UsersContext() : base("StoreDB")은 잘못된 것입니다. 하지만 기본값 인 : base("DefaultConnection")을 남겨 두었을 때 DefaultConnection 데이터베이스가 생성되었고 "StoreDB"라는 데이터베이스가 하나뿐이었습니다.

Database.SetInitializer(new Namespace.Models.StoreDbInitializer()); 
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Namespace.Models.UsersContext>()); 

을하지만 응용 프로그램을 실행할 때, 나는이 오류가 발생합니다 :

나는 어떤 UsersContext

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public DateTime? DoB { get; set; } 
} 

에 속하는 UserProfile로 변경 그리고 나는 다음과 같은 Global.asax에 업데이트했다 :

CREATE DATABASE permission denied in database 'master'. 

왜 데이터베이스를 만들려고합니까? "주인"?

<add name="StoreDB" 
    connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=SSPI; MultipleActiveResultSets=True" 
    providerName="System.Data.SqlClient"/> 
+0

내가 실수하지 않으면 SQL Server 인스턴스에 데이터베이스를 추가 할 때 master db의 테이블에 항목이 기록됩니다. 즉, DB를 만들려고하면 Master db에 대한 권한이 있어야합니다. [Microsoft의 마스터 DB 페이지] (http://msdn.microsoft.com/en-us/library/ms187837.aspx) –

+0

안녕하세요,하지만 내 목표는 master db를 사용하지 않는 것입니다. 저는 광산을 사용하고 싶습니다. '내가 이미 프로덕션으로 옮길 때 EF와 관련된 문제가 생길까 걱정됩니다. DB를 제어 할 수 없다면 모든 것을 바꿀 것입니다. ( – Davide

+0

마스터 db는 모든 데이터베이스의 목록을 유지합니다. 그래서 당신이 당신의 DB 인'StoreDB'에 연결할 때, SQL Server는 마스터 DB에서 해당 DB에 대한 엔트리를 검색 할뿐만 아니라 다른 것들 (예를 들어, 내 이해가 마스터 데이터베이스에 더 이상 보관되지 않음)을 조회 할 것입니다. .기본적으로 마스터 db가 없으면 SQL Server를 사용할 수 없습니다. –

답변

0

관리자가 아닌 Visual Studio를 실행하고 있었다고 생각합니다. 왜 그런지 정확히 모르겠지만 지금은 괜찮습니다. 불편을 끼쳐 드려 죄송합니다. 시간과 답변에 감사드립니다.

1

하면 IIS에서 사이트를 실행하고 있습니까 :

내 연결 문자열은 다음과 같다? 응용 프로그램 풀이 SQL Express 인스턴스에 데이터베이스를 만들 수있는 계정으로 실행되고 있습니까? ApplicationPoolIdentity으로 실행중인 경우 변경하여 NetworkService으로 실행하십시오.

또한 UsersContext을 제거하고 속성을 StoreDB 컨텍스트로 옮깁니다. 연결 문자열과 동일한 이름을 가진 하나의 컨텍스트가 있어야합니다.

+0

안녕하세요, 저는 실제로 Cassini를 사용하고 있습니다. 뭔가를 바꿔야합니까? – Davide

+0

왜 2 개의 컨텍스트가 있습니까? 2 개의 데이터베이스가 있습니까? – levelnis

+0

아니요, 단 하나의 DB입니다. 하나의 컨텍스트는 MVC (사용자 용)에 의해 자동으로 만들어졌고, 다른 컨텍스트는 자습서를 통해 나에 의해 만들어졌습니다. 나는 MVC 4와 EF에 익숙하다는 것을 인정한다. 아마 아키텍처가 틀릴 것이다. – Davide

0

"StoreDB"라는 연결 문자열이 있고 그 대신에 이름이 지정된 데이터베이스를 만드는 중입니다. 생성자).

public UsersContext() : base("name=StoreDB") 
... 

것을 시도하고 작동하는지 알려주세요 :

당신은 명시 적으로 그렇게 같은 연결 문자열의 이름입니다 생성자를 알 수 있습니다.

+0

안녕하세요, 행운과 함께이 시도 :(.. 다른 아이디어? – Davide

관련 문제