2009-12-16 4 views
1

Я использую Microsoft.Data.Entity.CTP (в CTP Entity Framework) в рамках платформы .NET 4 для создайте метаданные EDMX из моих классов C#, чтобы создать схему базы данных.Исключение при создании EDMX/DB-схемы с использованием Entity Framework 4 с использованием ContextBuilder с общим классом

я установка простой модели как таковой:

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, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]]'.

На этой линии в AModelContainer:

return CreateObjectSet<SpecialClass<string>>(); 

конструктор по умолчанию моего родового 'SpecialClass' The ничего не делает в данный момент, должен ли?

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

Или это проблема с ContextBuilder не зная, что делать точно, есть ли способ использовать builder.ComplexType(), или другим способом, чтобы направлять его?

Или CTP не может справиться с этим сценарием еще ...

Это «` 1»после того, как мое имя класса также не сидит хорошо со мной, за исключением ...

ответ

4

Вы не можете использовать общие классы как объекты с EF (и по расширению только Code-Only).

Это ограничение возможностей сопоставления между CLR и концептуальной моделью.

Сообщение 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 является «Entity» в модели EF, и в ID свойства базового класса проявляется как свойство от Person.

Но в .NET 4.0/EF 4 нет планов поддерживать сопоставление самого общего класса с Entity в модели.

Надеется, что это помогает

Alex

 Смежные вопросы

  • Нет связанных вопросов^_^