Entity framework 实体框架代码优先自定义属性

Entity framework 实体框架代码优先自定义属性,entity-framework,ef-code-first,odata,odatacontroller,Entity Framework,Ef Code First,Odata,Odatacontroller,我首先在spa应用程序中使用实体框架代码和OData控制器,对于我的复合表,例如:personals->PayRolls,我在带有NotMapped属性的分部类中添加了两个属性。因为我以后在保存更改时使用它们。我检查记录是否已在客户端被删除或修改以保存在数据库中 部分类别为: public partial class PayRoll { [NotMapped] public bool IsDirty { get; set; } [NotMapped] publ

我首先在spa应用程序中使用实体框架代码和OData控制器,对于我的复合表,例如:personals->PayRolls,我在带有NotMapped属性的分部类中添加了两个属性。因为我以后在保存更改时使用它们。我检查记录是否已在客户端被删除或修改以保存在数据库中

部分类别为:

 public partial class PayRoll
{
    [NotMapped]
    public bool IsDirty { get; set; }

    [NotMapped]
    public bool IsDeleted { get; set; }
}
如果在加载数据期间未添加NotMapped属性,则会出现sql异常,该异常显示无效的列名“IsDirty”。\r\n无效的列名“IsDeleted”。所以我添加了NotMapped属性,以使其理解它们不是数据库的表字段

但在保存数据的过程中,我遇到了一个错误,显示:类型“Template.CodeFirst.PayRoll”上不存在属性“IsDirty”。确保仅使用由类型定义的属性名称。不过,它与entity framework database first.edmx文件配合得很好

oDataController上的Put方法为:

 // PUT: odata/Hrm_Personnels(5)
     [CheckKey("hrm.Personnels.Edit")]
    public IHttpActionResult Put([FromODataUri] int key, Personnel personnel)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (key != personnel.Id)
        {
            return BadRequest();
        }

        foreach (var payroll in personnel.PayRolls)
        {
            if (payroll.IsDirty)

                db.Entry(payroll).State = (payroll.ID > 0) ? EntityState.Modified : EntityState.Added;

           if (payroll.IsDeleted)

                db.Entry(payroll).State = EntityState.Deleted;
        }

        db.SaveChanges();

        db.Entry(personnel).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!PersonnelExists(key))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return Updated(personnel);
    }

提前感谢

实际上,第一条注释是正确的答案,通过使用下面的代码并从IsDirty和IsDeleted属性中删除NotMapped属性,问题就解决了

 modelBuilder.Entity<PayRoll>().Ignore(c => c.IsDirty);
        modelBuilder.Entity<PayRoll>().Ignore(c => c.IsDeleted);

尝试在您的上下文的onmodel创建中显式忽略它。我想知道您的问题是否与如何序列化分部类有关?因为我使用了代码优先的方法,所以我将IsDirty和IsDeleted属性添加到原始类,而不是上面的示例代码中的分部类,但这仍然没有任何区别,我仍然得到了错误。