У меня есть несколько классов, которые наследуются от абстрактного базового класса, который содержит некоторый общий код полезности. Я хочу перейти к EF для доступа к данным, но мне все же хотелось бы, чтобы объекты наследовали общий код в базовом классе. Классы EF уже наследуются от EntityObject, поэтому я не могу наследовать свой базовый класс. Каков правильный способ справиться с этим? My environment is Net 3.5/C#Как получить класс Entity Framework наследовать базовый класс
ответ
Извините, если вы видели мой предыдущий пост - я пропустил что-то важное в вашем вопросе.
Вы можете использовать частичные классы. Сделайте свой неполный класс внутренним полем с экземпляром базового класса, который вы хотите, и реализуете все методы и свойства (если они уже не реализованы в сущности). Если вы пытаетесь, то, чтобы разрешить использование вашего класса сущности, вы можете использовать public static implicit operator
в вашем базовом классе (или в классе частичных сущностей), чтобы разрешить преобразование без проблем.
Если у вас есть абстрактный базовый класс под названием MyBaseClass, вы можете сделать что-то вроде:
public partial class MyEntityClass
{
private MyBaseClass _baseClass;
private MyBaseClass BaseClass
{
get
{
if (_baseClass == null)
{
_baseClass = new MyBaseClass();
}
return _baseClass;
}
}
public string BaseClassString
{
get
{
return BaseClass.BaseClassString;
}
set
{
BaseClass.BaseClassString = value;
}
}
// etc.
public static implicit operator MyBaseClass(MyEntityClass e)
{
return new MyBaseClass() {
Property1 = e.Property1,
Property2 = e.Property2 // etc.
};
}
public static implicit operator MyEntityClass(MyBaseClass b)
{
return new MyEntityClass() {
Property1 = b.Property1,
Property2 = b.Property2 // etc.
};
}
}
Если вы все еще используете Visual Studio 2008, я не уверен, что вы сможете это сделать (хотя кто-то, пожалуйста, не стесняйтесь меня исправлять).
Но если вы используете VS2010, вы можете использовать новые параметры шаблона T4 (даже при таргетинге .net 3.5). Я бы сделал, чтобы ваш базовый класс наследовал от класса EntityObject, а затем изменил шаблоны t4, используемые для генерации классов для наследования из вашего базового класса.
Если вы все еще в VS2008, вы, вероятно, все равно можете сделать то же самое, вам просто нужно вручную изменить созданные файлы CS (каждый раз, когда вы меняете свою модель), который предоставлен будет ужасно ,
- 1. Выберите базовый класс в Entity Framework
- 2. Базовый класс в Entity Framework 6?
- 3. Извлечь только базовый класс из Entity Framework
- 4. Entity Framework Code First - игнорировать базовый класс
- 5. Как заставить код UserControls наследовать базовый класс?
- 6. Entity Framework 4 + DBContext T4 + Абстрактный базовый класс
- 7. Entity Framework - Как создать базовый класс для класса сущности?
- 8. Как игнорировать не абстрактный базовый класс в Entity Framework?
- 9. Базовый класс/Entity в EntityFramework 5.0
- 10. Абстрактный базовый класс или класс?
- 11. Получить ближайший базовый класс
- 12. Почему платформа Entity Framework не позволяет создать собственный базовый класс?
- 13. Как наследовать класс #include?
- 14. Как наследовать класс RuntimeException?
- 15. Как наследовать класс?
- 16. Как наследовать класс WizardResourceImportPage?
- 17. Entity framework - генерирует пустой класс
- 18. Как создать базовый класс, когда дочерние элементы не могут наследовать?
- 19. Entity Framework и абстрактный класс
- 20. Entity Framework Recreate ПОКО класс
- 21. Недостаточный класс потомков в базовый базовый класс
- 22. Динамически добавлять базовый класс?
- 23. Как наследовать базовый класс с singleton в python
- 24. Базовый класс и производный класс
- 25. Союзы как базовый класс
- 26. EF Code First Entity Базовый класс
- 27. получить базовый класс в python
- 28. Базовый класс, производный класс и класс Iclass?
- 29. Базовый репозиторий Entity Framework
- 30. Базовый класс vs Класс полезности
моего решения, в то время как немного утомительно, делает работу в VS2008, и вам не нужно изменять какой-либо сгенерированный код , Спасибо за подсказку, хотя - намного лучше в VS2010! – Andrew
@ Андрей: Да, это очень интересный подход. Однако утомительным было бы преуменьшение, если у вас есть модель с 100 объектами. Хотя вы можете использовать шаблоны T4 или шаблоны CodeSmith для генерации частичных объектов. – CodingGorilla