2009-12-16 3 views
1

.NET Framework 4에서 (엔터티 프레임 워크 CTP에서) Microsoft.Data.Entity.CTP를 사용하고 있습니다. C# 클래스에서 EDMX 메타 데이터를 만들어 데이터베이스 스키마를 만듭니다.일반 클래스가있는 ContextBuilder를 사용하여 Entity Framework 4를 사용하여 EDMX/DB 스키마를 만들 때 예외가 발생했습니다.

I 설정과 같은 간단한 모델 :

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

나는 내 모델을 기반으로 새로운 ContextBuilder을 정의하는 간단한 패턴을 따릅니다.

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"... 내 클래스 이름도 예외가 저와 잘 앉지 않는 후

답변

4

오늘 일반 클래스를 EF가있는 엔티티 (확장 코드 - 전용)로 사용할 수 없습니다.

이는 CLR과 개념적 모델 간의 매핑 기능에 대한 제한 사항입니다.

포스트 베타 우리는 이런 종류의 할 수있는 기능 추가 :

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에는 모델의 엔터티에 제네릭 클래스 자체 매핑을 지원할 계획이 없습니다.

희망이

알렉스

을하는 데 도움이