Как получить идентификатор последней добавленной строки при использовании структуры сущности с шаблоном единицы работы - PullRequest
0 голосов
/ 11 мая 2018

как получить идентификатор последней добавленной строки при использовании структуры сущности с шаблоном единицы работы ??Я знаю, что после SaveChanges () автоматически увеличиваемый столбец автоматически обновляется, вы можете получить его как: -

Comment comment=new comment();
    comment.username="sachin";
    db.saveChanges();
var id= comment.commentId;

(простое решение), но как сделать то же самое при использовании единицы работы? И, пожалуйста, неСкажите, зачем вам единица работы? DbContext - это уже единица работы.Действие в контроллере

public ActionResult Savecomment(string comment)
                    {
                        var user = (from a in _registrationService.GetAllRegistrations() where a.Email == Convert.ToString(Session["Email"]) select a).FirstOrDefault();

                        var userid = Convert.ToInt32(user.UserId);
                        if (ModelState.IsValid)
                        {
                            Comment cmt = new Comment();
                            cmt.CommentId = cmt.CommentId;
                            cmt.DateTime = System.DateTime.Now;
                            cmt.PostId = Convert.ToInt32(TempData["pid"]);
                            cmt.UserId = userid;
                            cmt.Body = comment;
                            _commentService.CreateComment(cmt);

                            var id=cmt.CommentId;//I need this
                            var res = _commentService.GetCommentById(id);
                            return Json(res,JsonRequestBehavior.AllowGet);
                        }
                        return RedirectToAction("Index","Home");


                    }

Метод обслуживания

public Comment CreateComment(Comment CommentEntity)
        {
            using (var scope = new TransactionScope())
            {
                var Comment = new Comment
                {
                    CommentId=CommentEntity.CommentId,
                    Body = CommentEntity.Body,
                    UserId = CommentEntity.UserId,
                    DateTime = CommentEntity.DateTime,
                    PostId=CommentEntity.PostId,

                };
                _unitOfWork.CommentRepository.Insert(Comment);
                _unitOfWork.Save();
               scope.Complete();
                return Comment;
            }
        }

единица работы: -

public Repository<Comment> CommentRepository
            {
                get
                {
                    if (this._CommentRepository == null)
                        this._CommentRepository = new Repository<Comment>(_context);
                    return _CommentRepository;
                }
            }

     public void Save()
            {
                try
                {
                    _context.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {

                    var outputLines = new List<string>();
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        outputLines.Add(string.Format("{0}: Entity of type \"{1}\" in state \"{2}\" has the following validation errors:", DateTime.Now, eve.Entry.Entity.GetType().Name, eve.Entry.State));
                        foreach (var ve in eve.ValidationErrors)
                        {
                            outputLines.Add(string.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage));
                        }
                    }
                    //System.IO.File.AppendAllLines(@"C:\errors.txt", outputLines);

                    throw e;
                }

            }

1 Ответ

0 голосов
/ 11 мая 2018

Создайте метод на CommentRepository, который возвращает последний вставленный комментарий:

public class CommentRepository: ICommentRepository //Only if you have the interface
{   
    internal DbContext _context;
    internal DbSet<Comment> dbSet;

    public CommentRepository(DbContext context)//I think you have something like this.
    {
        _context = context;
        dbSet = context.Set<Comment>();
    }

    (...)
    public int ReturnLast()
    {
        //Use your context or DbSet here to return the data.
        //You are using .Last() but I'm not sure if that gets what you want.
        var lastComment = dbSet.ToList().Last();
        return lastComment.Id;
    }
}

Тогда, когда вы используете UnitOfWork, просто получите к нему доступ:

var comment = _uow.CommentRepository.ReturnLast();

Я не знаю, как построен ваш репозиторий, поэтому я просто догадываюсь здесь. Вы не должны использовать UnitOfWork внутри хранилища.

...