Я работаю над ASP.NET Core и обнаружил вещь о наследовании (поскольку IdentityUser
можно получить с помощью ApplicationUser
).
Вот только демо, чтобы объяснить, что это такое:
Объекты:
public class Animal
{
public string Name { get; set; }
}
public class Cat : Animal
{
// cat has no wings...
}
public class Eagle : Animal
{
public object LeftWing { get; set; }
public object RightWing { get; set; }
}
Контекст базы данных (только для демонстрации):
public void SaveChanges(Animal animal)
{
// save changes for "Animals" table...
}
И используйте это:
var cat = new Cat { Name = "Norris" };
var eagle = new Eagle { Name = "Voldemort", LeftWing = "good", RightWing = "broken" };
SaveChanges(cat);
SaveChanges(eagle);
// in asp.net core, this can be:
// public class ApplicationUser : IdentityUser {}
// _dbContext.Users.Add(new ApplicationUser { ExtensionProperty = "foo" });
// but we forgot to update the "Users" table
// which refers to "ApplicationUser" class instead if "IdentityUser" class by default
// _dbContext.Users.Add(new IdentityUser());
Поскольку у кошки нет крыльев, нам не нужно добавлять левое крыло и правое как два свойства.
Кроме того, не у всех животных есть крылья, поэтому их не нужно определять в таблице Animals
.
Чтобы решить эту проблему , мы можем создать две таблицы Cats
и Eagles
.
Но в этом посте я просто хочу упомянуть о наследовании.
Когда папу можно заменить сыном, а у сына два крыла, а у папы нет?