먼저 엔티티 프레임 워크 코드를 사용하여 리포지토리 패턴을 구현하려고합니다. rc 1. DbContext를 만드는 데 문제가 있습니다. IROCOSitory를 해결하는 ioc 컨테이너가 있고 windsor.config 파일에 연결 문자열이있는 새로운 DbContext를 뉴스로 제공하는 contextprovider가 있습니다. linq2sql에서이 부분은 아무 문제가 없었지만 EF는 질식하는 것 같습니다. 아래 문제를 예제로 설명하겠습니다. 조금 단순화하기 위해 코드를 뽑아 냈습니다. 그래서 여기서 저장소 패턴을 볼 수 없습니다. 모든 여분의 코드와 클래스가 없으면 어떤 일이 일어나는지 바로 알 수 있습니다.Entity Framework RC1 DbContext 쿼리 문제
using (var context = new PlssContext())
{
var x = context.Set<User>();
var y = x.Where(u => u.UserName == LogOnModel.UserName).FirstOrDefault();
}
using (var context2 = new DbContext(@"Data Source=.\SQLEXPRESS;Initial Catalog=PLSS.Models.PlssContext;Integrated Security=True;MultipleActiveResultSets=True"))
{
var x = context2.Set<User>();
var y = x.Where(u => u.UserName == LogOnModel.UserName).FirstOrDefault();
}
PlssContext는 내 DbContext 클래스를 생성합니다. 저장소 패턴은 PlssContext에 대해 아무것도 모릅니다. 내가 할 수있는 최선의 생각은 sqlexpress 데이터베이스에 대한 연결 문자열로 DbContext를 생성하고 그런 식으로 데이터를 쿼리하는 것입니다. var context2의 연결 문자열은 PlssContext 객체를 새로 작성한 후 컨텍스트에서 가져옵니다. 그래서 그들은 같은 sqlexpress 데이터베이스를 가리키고 있습니다.
첫 번째 쿼리가 작동합니다. 두 번째 쿼리가이 오류와 함께 비참하게 실패
The model backing the 'DbContext' context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance. For example, the DropCreateDatabaseIfModelChanges strategy will automatically delete and recreate the database, and optionally seed it with new data.
이 줄을 다음
var y = x.Where(u => u.UserName == LogOnModel.UserName).FirstOrDefault();
에 대한 것은 내 DbContext입니다
namespace PLSS.Models
{
public class PlssContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Corner> Corners { get; set; }
public DbSet<Lookup_County> Lookup_County { get; set; }
public DbSet<Lookup_Accuracy> Lookup_Accuracy { get; set; }
public DbSet<Lookup_MonumentStatus> Lookup_MonumentStatus { get; set; }
public DbSet<Lookup_CoordinateSystem> Lookup_CoordinateSystem { get; set; }
public class Initializer : DropCreateDatabaseAlways<PlssContext>
{
protected override void Seed(PlssContext context)
{
저도 같은 오류로 초기화 모든 전략을 시도했습니다 . 나는 데이터베이스가 바뀌고 있다고 생각하지 않는다. 나는 그런 오류가 반환하는
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
을 제거하면 종류의 의미가
The entity type User is not part of the model for the current context.
입니다. 그러나 어떻게이 모든 것을 하나로 모으고 있습니까?
코드 첫 번째 방법을 사용하지 않은 경우 연결 문자열 작업을 사용 하시겠습니까? 데이터베이스가 생성 된 후에도 연결 문자열과 함께 DbContext를 사용하여 원하는 것을 수행 할 수 없습니까? – Steve
연결 문자열이 아닙니다. 이것은 컨텍스트의 구성에 관한 것이며 구성은 기본 클래스가 아닌 파생 클래스에 의해 정의됩니다. 'PlssContext'를 사용해야합니다. –
윈저를 사용하여 컨텍스트를 전달하는 방법을 조사해야합니다. 그냥 구성 요소로 추가 할 수 있다고 생각합니다. 나는 당신이 그것을 당신의 예제에서 하드 코딩 한 방법을 좋아하지 않는다. – Steve