Как я могу обновить данные базового типа в производный класс, используя первую таблицу кода EF для каждого типа - PullRequest
1 голос
/ 16 марта 2012

// вот мои модели данных:

public class People
{
    public int PeopleID { get; set; }

    [Required]
    public string Name { get; set; }
}

[Table("User")]
public class User : People
{
    [Required]
    public string LoginName { get; set; }

    [Required]
    public string PassWord { get; set; }

}

// и я сохранил элемент в таблице People

context.People.Add (new People {Name = "Jack"});

context.SaveChanges ();

// и теперь" Джек "повышен как пользователь этой системы // как я могу обновить его данные и дать емуЛогин и пароль?

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Это распространенная ошибка проектирования.

Объекты не могут изменить свой тип; в этом случае вам не следует использовать наследование.

Вместо этого User может иметь ссылку на Person (еще один совет: имена ваших сущностей должны быть единичными, независимо от того, что вы называете таблицей)

0 голосов
/ 16 марта 2012

Прежде всего вам нужно объявить столбец дискриминатора. Например, PeopleType, который не может отличить пользователей от всех людей по определенному значению.

Таким образом, в вашем сценарии вам нужно будет создать Джека как пользователя, но вы можете собрать его как элемент людей

[Table("People")] 
public class People 
{ 
    public int PeopleID { get; set; } 

    [Required] 
    public string Name { get; set; } 

    public int Type { get; set; }
} 

public class User : People 
{ 
    [Required] 
    public string LoginName { get; set; } 

    [Required] 
    public string PassWord { get; set; }

}

Переопределить его в DbContext

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
            modelBuilder.Entity<People>().Map<User>(m => { m.Requires("PoepleType").HasValue(1 /* any value you like */); })
}
...