Похоже, вы хотите фильтр, который наследуется от ActionFilterAttribute. В моем случае это самый простой пример, который у меня есть. Это моя модель, обратите внимание, что атрибуты определяют отображение в базе данных.
[Table("UserProfile")]
public class UserProfile
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
}
В моем случае это было так просто, как показано ниже, хотя это не было историческим:
public sealed class UsersContext : DbContext
{
public UsersContext() : base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
LazyInitializer.EnsureInitialized(ref _initializer, ref isInitialized, ref initializerLock);
}
public void CheckDatabase()
{
Database.SetInitializer<YourDBContextType>(null);
using (var context = new YourDBContextType())
{
if (!context.Database.Exists())
{
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
// Uses your connection string to build the following table.
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
Конечным результатом является не только то, что EF является первым кодом, но также позволяет вашим моделям использовать ваши примитивы, полученные из ваших сложных объектов. Теперь, если у вас есть другой, скажем, исторический, DBContext, я бы порекомендовал изменить либо текстовый файл преобразования, либо создать базовый класс для ваших сущностей. Оба способа позволяют легко генерировать код, который может быть вставлен в вашу таблицу, а затем обработать эту сущность, клонировать ее в историческую модель и сохранить. При всем при этом я являюсь поклонником первых подходов к базе данных, концентрируясь на ограничениях, триггерах и т. Д. Вместо фреймворка.