3

Mvc3 및 MvcScaffolding NuGet을 사용하여 새로운 MVC 3 파일럿 응용 프로그램을 만들고 있습니다. 이미 가지고있는 데이터베이스를 사용하기 전까지 모든 것이 원활하게 실행됩니다. 응용 프로그램의 형식으로 데이터베이스를 만드는 유지 :MVC 3 지정된 데이터베이스를 사용하는 대신 새 데이터베이스를 만듭니다.

projectname.Models.projectnameContext

내가 여기에 붙어있어, 내 connectionStrings 것은 :

<connectionStrings> 
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 
    <add name="EnginesTrackingEntities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=WARCHLAPPY\SQLEXPRESS;initial catalog=[EnginesTracking];integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

하는 내 데이터베이스가 EnginesTracking 지정합니다.

업데이트하는 것은

나는 this example에서 데이터베이스 첫 번째 방법을 다음과 같은거야.

나는 완벽하게 작동하지만 응용 프로그램이 시작될 때 지정한 테이블을 사용하는 대신 새 테이블을 만듭니다.

유일한 한 가지 차이점은 내 프로젝트에는 databaseEntities 없다는 것입니다, 대신 내가 좀이 포기하고있어 수 8 단계

갱신 2

을 할 수있는 projectContext있다 코드를 따라 가려합니다. 첫 번째 접근 방식은 파일럿이되는 데 많은 시간이 걸리기 때문입니다.

은 Model1.context.cs입니다 :

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated from a template. 
// 
// Manual changes to this file may cause unexpected behavior in your application. 
// Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace ErrorReportingSystem.Models{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public partial class EnginesTrackingEntities : DbContext 
    { 
    public EnginesTrackingEntities() 
     : base("name=EnginesTrackingEntities") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

    public DbSet<Engine_Part> Engine_Part { get; set; } 
    public DbSet<Engines> Engines { get; set; } 
    public DbSet<Error> Error { get; set; } 
    public DbSet<Has_error> Has_error { get; set; } 
    public DbSet<Locations> Locations { get; set; } 
    public DbSet<Operators> Operators { get; set; } 
    public DbSet<sysdiagrams> sysdiagrams { get; set; } 
    } 
} 
+0

DbContext에 어떤 연결 문자열을 지정 하시겠습니까? –

+0

@MarkOreta 당신은 무엇을 의미합니까? ado.net dbcontext에 대한 코드 생성을 추가 할 때 데이터베이스 지정 필드가 없습니다. –

+0

죄송합니다, CodeFirst를 사용하고있는 줄 알았는데 - 연결 문자열이 업데이트되면 이름을 변경 하시겠습니까?생성 된 Designer 코드를 보면 사용할 연결 문자열을 알 수 있습니다. 다음과 같이 보입니다 : public Entities1() : base ("name = Entities1", "Entities1") –

답변

1

마침내 문제가 발견되었습니다. 나는 올바른 방향으로 나를 가리키는 끝내는 유사한 문제 here을 발견했다.

public ErrorReportingSystemContext() : base("name=EnginesTrackingEntities") { } 

ErrorReportingSystemContext.cs 파일에 /Models 폴더 아래 :

나는 추가했다.

완료!

1

당신이 코드 첫 번째 엔티티 프레임 워크를 사용하는 것 같다. 게시물은 아마 그 포럼에서 최고의 노출을 얻을 것입니다. EnginesTrackingEntities는 EF 연결 문자열입니다.

코드 우선 처리의 가장 큰 문제점 중 하나는 POCO가 변경 될 때마다 db를 삭제하고 다시 작성하는 것입니다.

배포하기가 어렵지 않고 (전혀 어렵지 않음) 가리키는 위치가 명확하기 때문에 데이터베이스의 첫 번째 접근 방식을 강력히 선호합니다. 코드의 장점은 POCO를 우아하게 꾸미고 장식 할 수 있다는 것입니다.

저는 정보가 부족하여 질문에 답을하고 있지는 않지만 직접적인 도움을줍니다. 배포 및 엔티티에 대한 정보가 조금 있으면 더 많은 것을 도울 수 있습니다.

+1

데이터베이스의 자동 삭제를 사용하지 않는 것은 간단합니다. 그냥 이것을 생성자에 추가하십시오. 'System.Data.Entity.Database.SetInitializer (새 CreateDatabaseIfNotExists ()); ' –

+0

이 동의했습니다. db 초기화 유형을 데이터베이스 대신 테이블을 삭제하는 유형으로 변경할 수도 있습니다. 하지만 솔직히 나는 데이터베이스에서 작업하는 것을 선호합니다. 유일한 목표는 개체 맞춤 설정 (예 : 속성)을 유지하는 것이지만 버디 클래스와 같은 해결 방법이 있습니다. 코드를 처음 사용하여 데이터베이스를 다시 사이클링하면 심각한 유지 관리 문제가 발생합니다. –

+0

EF는 데이터 손실없이 먼저 코드 작업을 수행하기 위해 1 년 넘게 마이그레이션 시스템을 갖추고 있습니다. –

관련 문제