Предположим, что ваша сущность «Работодатель» имеет только свойства, допускающие значение NULL, тогда можно перейти к таблице в базе данных и изменить «Дискриминатор» с «Пользователь» на «Работодатель». Все отношения будут сохранены. А также возможно сделать противоположное.

я есть проект, где я определил в EFEmployer как производный классUser, В моем процессе я создаю пользователя, не зная, будет ли он в конечном итоге работодателем (или другими пользователями), и позже мне нужно его преобразовать. Сначала я попробовал (Intellisense указал, что явное преобразование существует):

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?

Ответы на вопрос(2)

Ваш ответ на вопрос