Дублирующийся объект без идентификатора - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно продублировать сущность, но не ее идентификатор, а затем обработать новую сущность как отдельный объект. Установленный аксессор моих сущностей Id не доступен. Поэтому я не могу изменить Id и установить его в null, и сейчас мне разрешено делать AddOrUpdate (на основе Id) в БД. Я не могу сделать простой Добавить. Мне нужно иметь возможность дублировать или клонировать разные объекты, так что, возможно, общая функция поможет мне сделать это, но я не знаю, с чего начать. Любая помощь pls.?

1 Ответ

1 голос
/ 23 апреля 2019

Один из вариантов - использовать Automapper для выполнения мелкого клонирования. Automapper можно настроить так, чтобы он игнорировал определенные свойства, такие как идентификатор, или все свойства с недоступными установщиками:

Итак, с учетом сущности, подобной:

public class SomeObject
{
    public int SomeId { get; private set; }
    public string Name { get; set; }

    public SomeObject(int? id = null)
    {
        if (id.HasValue)
            SomeId = id.Value;
    }
}

вы можете настроить маппер так:

        var mapperConfig = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<SomeObject, SomeObject>().IgnoreAllPropertiesWithAnInaccessibleSetter();
        });
        IMapper mapper = new Mapper(mapperConfig);

        var test = new SomeObject(1) { Name = "Fred" }; // object we will clone.
        var test2 = new SomeObject(); // example of an existing "new" object to copy values into...
        mapper.Map(test, test2); // Copy values from first into 2nd..
        var test3 = mapper.Map<SomeObject>(test); // Example of letting automapper create a new clone.

В обоих случаях столбец идентификатора не был скопирован. Возможно, вы захотите использовать пример «test2» для использования context.Entities.Create для создания нового прокси-сервера отслеживания для новой сущности, хотя EF отлично работает с новыми экземплярами POCO сущности, если она добавлена ​​в DbSet сущностей.

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