엔티티 프레임 워크를 사용하여 EDMX/DB-SCHEMA 생성 예외 4 일반 클래스와 함께 ContextBuilder를 사용합니다.
-
19-09-2019 - |
문제
나는 사용하고있다 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에는 일반 클래스 자체를 모델의 엔티티에 매핑하는 것을 지원할 계획이 없습니다.
도움이 되었기를 바랍니다
알렉스