У меня есть проект, в котором я определил в EF Employer
как производный класс User
. В моем процессе я создаю пользователя, не зная, станет ли он в конечном итоге работодателем (или другими пользователями), а затем мне нужно его преобразовать. Сначала я попробовал (Intellisense указано явное преобразование существует):Downcasting с Entity Framework
Employer e = (Employer) GetUser();
, но во время выполнения я получил:
Unable to cast object of type 'System.Data.Entity.DynamicProxies.User_7B...0D' to type 'Employer'.
поэтому я попытался написать конвертер:
public partial class User
{
public static explicit operator Employer(User u)
{
но я получить сообщение об ошибке:
Error 21 'User.explicit operator Employer(User)': user-defined
conversions to or from a derived class are not allowed
C:\Users\..\Documents\Visual Studio 2010\Projects\..\Website\Models\EF.Custom.cs
штраф. Затем я перегружен конструктор для Employer
как это:
public partial class Employer
{
public Employer(User u)
{
this.Id = u.Id;
this.Claims = u.Claims;
// etc.
}
}
и полагал, что я мог бы просто сделать:
Employer e = new Employer(GetUser());
, но когда я запускаю его я получаю сообщение об ошибке:
System.InvalidOperationException was unhandled by user code
Message=Conflicting changes to the role 'User' of the
relationship 'EF.ClaimUser' have been detected.
Source=System.Data.Entity
StackTrace:
[...]
at Controllers.AuthController.Register(String Company, String GivenName,
String Surname, String Title, String Department) in C:\Users\..\Documents\
Visual Studio 2010\Projects\..\Website\Controllers\AuthController.cs:line
, как в крайнем случае я пробовал написать это:
Employer e = Auth.Claims("id")
.Where(x => x.Value == Auth.NameIdentifier())
.Select(x => x.User)
.Cast<Employer>()
.Single();
... GetUser() возвращает объект типа User
, который не предлагает .Cast<>
, поэтому я использовал прямой запрос, чтобы туда добраться ... но я все равно получаю исключение динамических прокси-объектов.
так что мой вопрос: как я могу опуститься, когда объект имеет постоянство через EF?
является частью 'Employer' вашей модели EF?если вы правильно наследуете наследование как 'TPH' или' TPC', тогда EF создаст правильный прокси-класс подкатегория – Eranga
@Eranga, да 'Employer' является частью EF-модели. И я использую TPT, поэтому у меня есть таблица под названием «Пользователи» и одна называется «Users_Employer» – ekkis