我使用C#语言处理Windows服务 和使用EntityFrameWork 我用AddRange添加列表 并通过SaveChangesAsync()保存; 当运行SaveChangesAsync程序崩溃并关闭时。 但使用SaceChanges()可以毫无问题地保存。
public class ApplicationDbContext : IdentityDbContext<IUnitOfWork>
{
public ApplicationDbContext() : base("DefaultConnection")
{
Configuration.LazyLoadingEnabled = true;
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 180;
}}
UOW:
public async Task<int> SaveAllChangesAsync()
{
return await SaveChangesAsync();
}
public IEnumerable<TEntity> AddThisRange<TEntity>(IEnumerable<TEntity> entities) where TEntity : class
{
return ((DbSet<TEntity>)Set<TEntity>()).AddRange(entities);
}
使用:
private readonly IDbSet<WebUrl> _webUrls;
private readonly List<WebUrl> _tempWebUrlsToInsert;
public MalwareDetectingManager(IUnitOfWork uow)
{
_uow = uow;
_webUrls = uow.Set<WebUrl>();}
创建列表:
var newWebUrl = new WebUrl
{
Url = normalizedUrl,
Status = UrlStatus.BadUrl,
LastUpdate = DateTime.Now,
AddedVersion = _version,
UpdatedVersion = _version
};
_tempWebUrlsToInsert.Add(newWebUrl);
保存:
_uow.AddThisRange(_tempWebUrlsToInsert);
await _uow.SaveAllChangesAsync(); //Crash Program