Linq2DB и вставьте новый элемент с личностью - PullRequest
0 голосов
/ 21 декабря 2018

Я переместил старую часть кода из EF в linq2db, и когда мне пришлось добавить новый элемент с идентификатором, на который ссылается внутренний элемент, мне пришлось выполнить следующий код

     if (axAnag == null)
     {
                    axAnag = new DataModels.AX();
                    var idAnag= context.InsertWithInt32Identity(axAnag);

                    axAnag.IdAnagrafica = idAnag;
     }

и ниже в коде

        fk.AxAnagraficaAssicurati = axAnag;
        fk.StatusProtocollo = statusProtocollo;
        fk.DataEsclusione = newAnagrafica.DataEsclusione ?? condizione.DataAnnullamento;
        fk.DataInclusione = newAnagrafica.DataInclusione;
        fk.DerogaEta = newAnagrafica.DerogaEta;
        fk.ProgrCategoria = condizione.ProgessivoCategoria;
        fk.IdCondizione = condizione.Id;
        fk.IdCategoria = condizione.IdCategoria;
        fk.DataOperazioneInclusione = DateTime.Now;
        fk.HYPER = newAnagrafica.HyperService;
        //GPA ticket  2017-0017962
        fk.LimiteEtaSuperato = newAnagrafica.IsLimiteEtaSuperato;
        //GPA cr24
        fk.FlagConteggioRegolazionePremio = newAnagrafica.FlagConteggioRegolazionePremio;
        fk.IdAnagrafica = axAnag.IdAnagrafica;

Что мне не так понятно, почему я должен добавить идентификатор и весь ссылочный элемент?

fk.AxAnagraficaAssicurati = axAnag;
fk.IdAnagrafica = axAnag.IdAnagrafica;

В модели с лесами у меня есть

    [Association(ThisKey = "IdAnagrafica", OtherKey = "IdAnagrafica", CanBeNull = true, Relationship = Relationship.ManyToOne, KeyName = "FK_BENEFIT_FK_ANAGRAFICA_ASS_POLIZZE_ANAGRAFICA", BackReferenceName = "BenefitFkAnagraficaAssPolizze")]
    public AxAnagraficaAssicurati AxAnagraficaAssicurati { get; set; }

Разве этого не достаточно, чтобы поставить один?а также связанные с вставкой axAnag есть ли способ, которым я могу избежать

 var idAnag= context.InsertWithInt32Identity(axAnag);
 axAnag.IdAnagrafica = idAnag;

Спасибо

1 Ответ

0 голосов
/ 22 декабря 2018

Я хочу сказать, что ваши проблемы возникают из-за того, что вы пытаетесь работать с linq2db так же, как это обычно делают люди с EF, но у linq2db нет такой тесной связи с моделью данных (нет отслеживания изменений, нет автоматической загрузки ссылок).С linq2db будет проще, если вы отделите отображения для объектов базы данных от модели данных вашего приложения.

Относительно вашего второго вопроса о InsertWithIdentity - этот API не поддерживает установку свойства identity, поэтому вам нужносделать это самостоятельно, если вам нужно обновить объект сгенерированным свойством.Вы можете создать запрос функции для такой функции.

Относительно задания как значения объекта, на который есть ссылка, так и значения поля внешнего ключа.В linq2db нет ничего, что указывало бы вам устанавливать какие-либо из них - если вы делаете это, то это то, что вам нужно для вашего приложения.Если вы хотите узнать, как linq2db использует эти два свойства, тогда:

  • Свойство поля FK является прямым отображением столбца таблицы FK, а значение из этого свойства используется в запросах, например, для вставки / обновленияоперации.Также это свойство заполняется значением при выборе.

  • Свойство Ассоциации имеет две роли.Во-первых, это простой способ определить операцию соединения в запросе linq.Второе - загрузить значение для этого свойства при выборе, используя метод LoadWith.linq2db не использует значение этого свойства ни для чего другого.

...