Asp.net mvc 4 如何在MVC4上创建特定模型的历史模型

Asp.net mvc 4 如何在MVC4上创建特定模型的历史模型,asp.net-mvc-4,model,entity,Asp.net Mvc 4,Model,Entity,在使用实体框架和MVC4Razor创建模型方面,我还是新手。我在如何保存模型的历史记录方面遇到了问题。如何创建在特定表或字段上具有历史记录的模型?例如:如果我想创造一个关于学校变化的历史。我仍然不清楚如何创建保存历史的模型。我必须如何在具有相同数据的不同型号上执行保存功能 事先非常感谢你 如果有人能成为一个简单的模型和模型历史的例子,以及它是如何运作的,我将非常感激。比如销售或销售历史记录 这是我的密码 一对多 公营儿童 { [关键] public int ChildID{get;set;}

在使用实体框架和MVC4Razor创建模型方面,我还是新手。我在如何保存模型的历史记录方面遇到了问题。如何创建在特定表或字段上具有历史记录的模型?例如:如果我想创造一个关于学校变化的历史。我仍然不清楚如何创建保存历史的模型。我必须如何在具有相同数据的不同型号上执行保存功能

事先非常感谢你

如果有人能成为一个简单的模型和模型历史的例子,以及它是如何运作的,我将非常感激。比如销售或销售历史记录

这是我的密码


一对多 公营儿童 { [关键] public int ChildID{get;set;}

    [Required,Display(Name="Project Code")]
    public string ProjectCode { get; set; }

    public string Status { get; set; }

    [DataType(DataType.Date)]
    public DateTime StatusDate { get; set; }

    public string FamilyName { get; set; }
    public string GivenName { get; set; }
    public string MiddleName { get; set; }

    [DataType(DataType.Date)]
    public DateTime Birthdate { get; set; }

    public string Gender {get;set;}
    public string Address { get; set; }
    public string Section { get; set; }
    public int SchoolLevelID { get; set; }
    public int SchoolYearID { get; set; }
    public int AreaID { get; set; }
    public int SchoolID { get; set; }
    public int GradeLevelID { get; set; }

    //Foreign Key - One to Many 
    public virtual SchoolLevel SchoolLevel { get; set; }
    public virtual SchoolYear SchoolYear { get; set; }
    public virtual Area Area { get; set; }
    public virtual School School { get; set; }
    public virtual GradeLevel GradeLevel{get;set;}

    //Child is foreign key at the table
    public virtual ICollection<Guardian> Guardians { get; set; }

}


public class SchoolLevel
{
    public int SchoolLevelID { get; set; }
    public string SchoolLevelName { get; set; }

    public virtual ICollection<Child> Children { get; set; }
}

public class SchoolYear
{
    public int SchoolYearID { get; set; }
    public string SchoolYearName { get; set; }

    public virtual ICollection<Child> Children{get;set;}
}

public class Area
{
    public int AreaID{get;set;}
    public string AreaName { get; set; }

    public virtual ICollection<Child> Children{get;set;}
}

public class School
{
    public int SchoolID { get; set; }
    public string SchoolName{get;set;}

    public virtual ICollection<Child> Children { get; set; }
}
public class GradeLevel
{
    public int GradeLevelID{get;set;}
    public string GradeLevelName { get; set; }

    public virtual ICollection<Child> Children { get; set; }
}


public class ChildDbContext : DbContext
{
    public DbSet<Child> Children { get; set; }
    public DbSet<SchoolLevel> SchoolLevels { get; set; }
    public DbSet<SchoolYear> SchoolYears { get; set; }
    public DbSet<Area> Areas { get; set; }
    public DbSet<School> Schools { get; set; }
    public DbSet<GradeLevel> GradeLevels { get; set; }
    public DbSet<Guardian> Guardians { get; set; }
}
[必需,显示(Name=“项目代码”)]
公共字符串项目代码{get;set;}
公共字符串状态{get;set;}
[数据类型(DataType.Date)]
公共日期时间状态日期{get;set;}
公共字符串FamilyName{get;set;}
公共字符串GivenName{get;set;}
公共字符串MiddleName{get;set;}
[数据类型(DataType.Date)]
公共日期时间出生日期{get;set;}
公共字符串{get;set;}
公共字符串地址{get;set;}
公共字符串部分{get;set;}
public int schoolevelid{get;set;}
public int SchoolYearID{get;set;}
公共int AreaID{get;set;}
公共int SchoolID{get;set;}
public int GradeLevelID{get;set;}
//外键-一对多
公共虚拟学校级别学校级别{get;set;}
公共虚拟学年学年{get;set;}
公共虚拟区域{get;set;}
公共虚拟学校{get;set;}
公共虚拟等级{get;set;}
//Child是表中的外键
公共虚拟ICollection监护人{get;set;}
}
公营班级
{
public int schoolevelid{get;set;}
公共字符串SchoolLevelName{get;set;}
公共虚拟ICollection子项{get;set;}
}
公共班级学年
{
public int SchoolYearID{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection子项{get;set;}
}
公共课区
{
公共int AreaID{get;set;}
公共字符串AreaName{get;set;}
公共虚拟ICollection子项{get;set;}
}
公立学校
{
公共int SchoolID{get;set;}
公共字符串SchoolName{get;set;}
公共虚拟ICollection子项{get;set;}
}
公营班级
{
public int GradeLevelID{get;set;}
公共字符串GradeLevelName{get;set;}
公共虚拟ICollection子项{get;set;}
}
公共类ChildDbContext:DbContext
{
公共DbSet子项{get;set;}
公共数据库集学校级别{get;set;}
公共DbSet学年{get;set;}
公共数据库集区域{get;set;}
公立DbSet学校{get;set;}
公共数据库集级别{get;set;}
公共数据库集监护人{get;set;}
}

您可以使用这种方法:创建一个
历史
模型。包含1个像o log这样的变化

public class History 
{
    public int HistoryId { get; set; }

    public int ModelType { get; set; }  //it is ModelTypeEnum value.
    public int ModelId { get; set; }
    public string PropertyName { get; set; }
    public string Propertyvalue {get;set;}
    public DateTime ChangeDate { get; set; }

    public int ChangedUserId { get; set; }
}
和枚举:

public enum ModelTypeEnum
{
    Child =1,
    SchoolLevel = 2,
    //etc.. 
};

例如,当您编辑1
子实体时,将更改的属性名称和值、其id、类型和其他(ChangeDate、ChangedUserId)指定给
历史记录
并保存历史记录。如果3个属性将更改,则应保存3个历史实体。然后,您可以按ModelId、ChangedUserId等加载(过滤)历史记录。

我不清楚您的意见。编写任何真实的示例。例如,模型子对象,您可以为该子对象添加地址。目前的模式会做得很好。但是我想要的是一种存储子地址的方法。例如,我更新了子地址,我如何创建一个用作子地址历史记录的模型。所以我想要的是,每次孩子的地址被更新时,它都会通过AddressHistoryModel记录下来,我不知道该如何触发它。非常感谢你的回复,你在我的问题上帮了我的忙。