Использование Entity Framework 4 Я хочу создать базовый интерфейс для моих объектов, чтобы свойства базового интерфейса были реализованы в виде полей в таблице для каждого производного класса (не в его собственной таблице), а затем иметь дело с производнымзанятия с использованием интерфейса.
Например, иметь интерфейс и некоторые классы, например:
public interface IBaseEntity
{
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
public class SomeEntity : IBaseEntity
{
public int SomeEntityId { get; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
public class OtherEntity : IBaseEntity
{
public int OtherEntityId { get; }
public float Amount { get; set; }
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
Это приведет к двум таблицам в базе данных, SomeEntity и OtherEntity, которые будут иметь четыре поля в каждой.SomeEntity имеет SomeEntityId, Name, CreatedOn и CreatedBy, а OtherEntity имеет OtherEntityId, Amount, CreatedOn и CreatedBy.Там нет таблицы IBaseEntity.
Я ожидал бы увидеть это в конструкторе в виде IBaseEntity, представляющего собой абстрактную сущность со свойствами CreatedOn и CreatedBy и две конкретные сущности, имеющие только свои непроизводные свойства - поэтому SomeEntity имеет только SomeEntityId и Name.Между конкретными сущностями и абстрактной сущностью существуют отношения наследования.
Тогда я хотел бы иметь автоматическое обновление столбцов для этих объектов при их сохранении, например так:
namespace MyModel
{
public partial class MyEntities
{
partial void OnContextCreated()
{
this.SavingChanges += new EventHandler(OnSavingChanges);
}
private static void OnSavingChanges(object sender, EventArgs e)
{
var stateManager = ((MyEntities)sender).ObjectStateManager;
var insertedEntities = stateManager.GetObjectStateEntries(EntityState.Added);
foreach (ObjectStateEntry stateEntryEntity in insertedEntities)
{
if (stateEntryEntity.Entity is IBaseEntity)
{
IBaseEntity ent = (IBaseEntity)stateEntryEntity.Entity;
ent.CreatedBy = HttpContext.Current.User.Identity.Name;
ent.CreatedOn = DateTime.Now;
}
}
}
}
}
Я только начинаю с Entity Framework иПохоже, что это должно быть в состоянии сделать довольно легко, но как на самом деле реализовать это ускользает от меня.Я не в курсе, или это возможно в Entity Framework 4?Стратегия «Таблица на конкретный тип» кажется решением, но я не смог заставить его работать.