엔티티 프레임 워크를 사용하여 EDMX/DB-SCHEMA 생성 예외 4 일반 클래스와 함께 ContextBuilder를 사용합니다.

StackOverflow https://stackoverflow.com/questions/1912333

문제

나는 사용하고있다 Microsoft.data.entity.ctp (엔티티 프레임 워크 CTP에서) .NET 4 프레임 워크 아래 내 C# 클래스에서 EDMX 메타 데이터를 생성하여 데이터베이스 스키마를 만듭니다.

간단한 모델을 설정합니다.

public class AModelContainer : ObjectContext
{
    public IObjectSet<RegularClass> RegularClasses { 
        get { return CreateObjectSet<RegularClass>(); }
    }
}

모델을 기반으로 새로운 컨텍스트 빌더를 정의하는 간단한 패턴을 따릅니다.

var builder = new ContextBuilder<AModelContainer>();

using(var context = builder.Create(new SqlConnection(connString)))
{
    context.RegularClasses.AddObject(new RegularClass());

    context.SaveChanges();
}

이것은 잘 작동합니다. 까지 좀 더 복잡한 일을하려고 노력합니다 ...

일반 클래스로 모델을 확장합니다

public class AModelContainer : ObjectContext
{
    public IObjectSet<SpecialClass<string>> SpecialClasses { 
        get { return CreateObjectSet<SpecialClass<string>>(); }
    }
}

이제 저장에서 나는 얻는다 예외:

EntityType 'Prototype.specialClass`1 [[System.String, Mscorlib, 버전 = 4.0.0.0, Culture = Neutral, PublicKeyToken = B77A5C561934E089]'에 대해 매핑 및 메타 데이터 정보를 찾을 수 없습니다.

이 라인에서 AmodelContainer:

return CreateObjectSet<SpecialClass<string>>();

내 일반적인 'SpecialClass'의 기본 생성자는 현재 아무것도하지 않아야합니까?

public class SpecialClass<T> 
{
    public SpecialClass()
    { }
}

아니면 이것이 문제입니까? ContextBuilder 정확히 무엇을 해야할지 모르면 builder.complextype () 또는 다른 방법을 안내하는 방법이 있습니까?

또는 CTP는 아직이 시나리오를 다룰 수 없습니다 ...

저것 "`1"내 수업 이름도 예외에서 나와 잘 어울리지 않습니다 ...

도움이 되었습니까?

해결책

오늘날 EF (및 확장 코드 전용)와 함께 일반 클래스를 엔티티로 사용할 수 없습니다.

이것은 CLR과 개념 모델 사이의 매핑 기능의 한계입니다.

Post Beta2 우리는 이런 종류의 일을 허용하는 능력을 추가했습니다.

public class Entity<TKey>
{
   public TKey ID {get;set;}
}

public class Person: Entity<int>
{
   public string Firstname {get;set;}
   public string Surname {get;set;}
}

어디에도 Person EF 모델의 '엔티티'이며 ID 기본 클래스의 속성은 Person.

그러나 .NET 4.0 / EF 4에는 일반 클래스 자체를 모델의 엔티티에 매핑하는 것을 지원할 계획이 없습니다.

도움이 되었기를 바랍니다

알렉스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top