重复插入数据库

时间:2016-01-26 11:11:04

标签: c#

我目前在这里遇到一个有趣的问题,每次我使用EntityFramework插入一个新项目时,我会看到一个新项目在实时之前提交,但具有相同的条目(属性)和一个String []数组在最后一栏。我实际上有一个定义的模型

public class SupervisionStageSetupModel
    {
        public int Id { get; set; }
        [Required]
        public string StageLevel { get; set; }
         [Required]
        public string Name { get; set; }
         [Required]
        public string Description { get; set; }

         public IList<SupervisionStageSetupChecklistModel> SupervisionStageSetupChecklists { get; set; }
       public string GetAuditDetails(string action)
        {
            return string.Format("{0} SupervisionStageSetup Setup:   {1}", action,Name);
        }
    }

public class SupervisionStageSetupChecklistModel
    {
        public int Id { get; set; }
        public int SupervisionStageSetupId { get; set; }
        public string Description { get; set; }
        public string[] Options { get; set; }
    }

在我的服务中,我有一个方法可以执行插入操作

private void ProcessCheckListItems(List<SupervisionStageSetupChecklist> entities,
            IList<SupervisionStageSetupChecklistModel> checkListItems, int stageSetupId)
        {
            var modelIds = checkListItems.Select(x => x.Id).ToList();

            var supervisionStageSetupChecklistRepository = _repository.GetRepository<SupervisionStageSetupChecklist>();
            var entitiesToDelete =
                entities.Where(x => !modelIds.Contains(x.Id));
            entitiesToDelete.ForEach(x => supervisionStageSetupChecklistRepository.Delete(x));

            var entitiesToAdd = checkListItems.Where(x => x.Id == 0).Select(x =>
                new SupervisionStageSetupChecklist()
                {
                    Description = x.Description,
                    SupervisionStageSetupId = stageSetupId,
                    Options = String.Join(",",x.Options)
                }).ToList();
            entitiesToAdd.ForEach(x =>
            {
                supervisionStageSetupChecklistRepository.Insert(x);
            }

                );
            var entityToUpdate =
                entities.Where(x => modelIds.Contains(x.Id));
            entityToUpdate.ForEach(source =>
            {

                var checklistItem = checkListItems.Single(x => x.Id == source.Id);

                source.Description = checklistItem.Description;
                source.Options = String.Join(",",checklistItem.Options);
                supervisionStageSetupChecklistRepository.Update(source);
            });

当我将我的VS2013置于调试模式以查看正在发生的事情时,我看到它只是来自插入视图的项目数,但是回到我的MSSQL2014,我发现两个记录插入为< / p>

Id| SupervisionStageId | Description | Options
2 | 3                  | Description | String[] Array   
3 | 3                  | Description | Yes,No

当然,在插入时设置断点后,我在entityToAdd对象上盘旋,它返回1作为计数,这还不够,用以下内容检索项目......

public SupervisionStageSetupItem GetDetails(int id)
        {
var entity = _repository.Find(id);
            var item = Mapper.Map<SupervisionStageSetup, SupervisionStageSetupItem>(entity);
            item.SupervisionStageSetupChecklists =
                entity.SupervisionStageSetupChecklists.Where(x => x.SupervisionStageSetupId == entity.Id)
                    .Select(x => new SupervisionStageSetupChecklistModel()
                    {
                        Description = x.Description,Options = x.Options.Split(',')
                    }).ToList();
            return item;
}

我将一个Options属性值设为“Y”,“e”,“s”,“,”,“N”,“o”。

我很困惑!,不知道我做错了什么

0 个答案:

没有答案