实体框架使用相同的方法检查插入或更新

时间:2016-03-21 22:54:15

标签: entity-framework entity-framework-6

我已经看到了当前的代码库,即具有存储库模式和UOW模式的实体框架方法具有此

"是否新款"方法它大部分时间用于插入和更新,但我遇到的问题是它检查ID = 0,然后插入。问题是数据库表无法更改,并且非自动递增ID

因此,这是名为

方法
public virtual void InsertOrUpdate(TEntity entity, bool startTrackProperties)
    {
        try
        {
            if (entity.IsNew())
            {
                Entities.Add(entity);
            }

            AttachForUpdate(entity, startTrackProperties);
        }
        catch (DbEntityValidationException dbEx)
        {
            var msg = string.Empty;

            foreach (var validationErrors in dbEx.EntityValidationErrors)
                foreach (var validationError in validationErrors.ValidationErrors)
                    msg += Environment.NewLine +
                           string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);

            var fail = new Exception(msg, dbEx);
            throw fail;
        }
    }

我称之为

public void CreateOrUpdateReportGroup(ReportGroup reportGroup)
    {

        var entity = _envyUnitOfWork.ReportGroups.GetById(reportGroup.Id);

        if (entity == null)
        {
            entity = new ReportGroup();
        }

        _envyUnitOfWork.ReportGroups.InsertOrUpdate(entity, true);
        Mapper.Map(reportGroup, entity);
        _envyUnitOfWork.Commit();

}

问题是我正在查找最大的ID并添加1,但是对于当前的代码库,这个IsNew()是个问题。

关于如何更轻松,更干净地使用非递增ID列进行插入的想法?

1 个答案:

答案 0 :(得分:0)

我想通了

 Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);