Получить добавленный первичный ключ состояния сущности Asp.Net Entity Framework - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь создать Change Tracker, переопределив метод dbcontext SaveChanges ().

Я не могу получить первичный ключ для сущности при добавленном состоянии.

Как мы можем получить добавленное состояние сущности, когдапопробуйте сохранить ChangeLog.

Переопределенный DbContext SaveChanges выглядит следующим образом:

        public override int SaveChanges()
        {

            var adddedEntites = ChangeTracker.Entries().Where(p => p.State == EntityState.Added).ToList();

            var now = DateTime.UtcNow;

            foreach (var added in adddedEntites)
            {
                var entityName = added.Entity.GetType().Name;


                foreach (var prop in added.CurrentValues.PropertyNames)
                {
                    var currentValue = added.CurrentValues[prop].ToString();
                    var id = new Guid();

                    ChangeLog log = new ChangeLog()
                    {
                        Id = id,
                        EntityName = entityName,
                        PrimaryKeyValue = null// how can I get pkey,
                        PropertyName = prop,
                        NewValue = currentValue,
                        DateChanged = now,
                        ActionType = "A"
                    };
                    ChangeLogs.Add(log);

                }
            }

return base.SaveChanges()
}

Спасибо.

1 Ответ

0 голосов
/ 17 октября 2019

Поскольку первичный ключ установлен в base.SaveChanges, его можно получить после вызова его, например, (используя отражение ):

public override int SaveChanges()
{
    var addedEntities = ChangeTracker.Entries().Where(p => p.State == EntityState.Added).ToList();

    var result = base.SaveChanges();

    foreach (var added in addedEntities)
    {
        var idInfo = added.Entity.GetType().GetProperty("Id");
        var id = idInfo.GetValue(added.Entity);
    }

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...