我已经看到了当前的代码库,即具有存储库模式和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列进行插入的想法?
答案 0 :(得分:0)
我想通了
Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);