Допустим, у меня есть два разных класса. Они имеют некоторые свойства, но также имеют некоторые индивидуальные свойства.
public class A
{
// Shared properties
public int Id { get; set; }
public DateTime CreatedDtm { get; set; }
public string CreatedBy { get; set; }
// Individual properties
public string PhoneNumber { get; set; }
public string EmailAddress { get; set; }
}
public class B
{
// Shared properties
public int Id { get; set; }
public DateTime CreatedDtm { get; set; }
public string CreatedBy { get; set; }
// Individual properties
public string StreetAddress { get; set; }
public string PostalCode{ get; set; }
public string City{ get; set; }
}
Теперь дело в том, что я хотел бы сохранить эти два типа как одну и ту же сущность. Это возможно, если я преобразую отдельные свойства в JSON. Таким образом, я мог бы создать общую сущность, как это:
public class C
{
// Shared properties
public int Id { get; set; }
public DateTime CreatedDtm { get; set; }
public string CreatedBy { get; set; }
// Individual properties
public object IndividualProperties { get; set; }
}
Но если я это сделаю, я потеряю все преимущества языка с типизацией stati c, а также все преимущества полиморфизма, делая это (например, class A
может иметь некоторые отличия от class B
).
Нет ли способа выполнить преобразование непосредственно перед сохранением объекта через Entity Framework (Core)? Конечно, я мог бы написать отображение самостоятельно, но у меня было ощущение, что здесь должен быть ярлык ...
По сути, я хочу сделать что-то подобное (не важно, интерфейс это, абстрактный класс или что-то совсем другое):
public void AddEntity(ISomeSharedInterface entity)
{
C sharedEntity = SomeMappingMethod(entity);
db = new Context();
db.SharedEntities.Add(sharedEntity);
db.SaveChanges();
}
Если вас интересует этот дизайн, он предназначен для процесса автоматизации. Различные формы, которые необходимо заполнить в процессе, различаются, но я хотел бы сохранить все элементы в одной таблице.