Net Core: сопоставление двух членов класса с одним столбцом в Entity Framework - PullRequest
1 голос
/ 25 сентября 2019

Как мне сопоставить двух членов класса с одним столбцом в базе данных Entity Framework?Является ли это возможным?Я попробовал следующий код и получил ошибки

        modelBuilder.Entity<Product>(entity =>
        {

            entity.Property(e => e.Id)
            .HasColumnName("ProductId");

            entity.Property(e => e.ProductId)
                .HasColumnName("ProductId");

Время выполнения ошибки:

«Product.Id» и «Product.ProductId» сопоставленыв столбец «ProductId» в «Product», но для него настроены разные стратегии создания значений. '

Мы пытаемся решить эту проблему, в противном случае общий репозиторий должен будет использовать Expression Builders

Net Core: производительность основного первичного идентификатора общего хранилища в Entity Framework

Их главное решение не работало.

var idName = _context.Model.FindEntityType(typeof(TEntity))
        .FindPrimaryKey().Properties.Single().Name;

1 Ответ

1 голос
/ 25 сентября 2019

Универсальные репозитории являются антишаблоном Entity Framework.Они, честно говоря, не стоят хлопот.

Однако, чтобы отобразить столбец ProductID в сущности:

entity.Property(e => e.Id)
    .HasColumnName("ProductId");
entity.Ignore(e => e.ProductId);

Подвох заключается в том, что при написании выражений Linq, которые будут проходить через EF в SQL, нужно избегатьиспользуя любые игнорируемые свойства.

В качестве альтернативы я бы предложил удалить поле ProductId в сущности и просто переназначить поле в ваших моделях представления и DTO, которые использует интерфейсный код и любой сериализатор, настроив Automapper для переводаСтолбец ID.

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