Linq2DB 并插入具有标识的新项目

Linq2DB and Insert a new item with an identity

我已将旧代码部分从 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;

我不太清楚的是为什么我必须添加 id 和整个引用项?

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;

谢谢

我想说的是,您的问题来自尝试以与人们通常使用 EF 相同的方式使用 linq2db,但 linq2db 与数据模型没有如此紧密的耦合(没有更改跟踪,没有自动加载引用).如果您将数据库对象的映射与应用程序的数据模型分开,那么使用 linq2db 会更容易。

关于你关于 InsertWithIdentity 的第二个问题 - 这个 API 不支持设置身份 属性,所以如果你需要用生成的对象更新你的对象,你需要自己做属性。您可以为此类功能创建功能请求。

关于同时设置引用对象值和外键字段值的问题。 linq2db 中没有任何内容告诉您设置其中任何一个 - 如果您这样做,那么它就是您的应用程序需要的东西。 如果您想知道 linq2db 如何使用这两个属性,那么:

  • FK 字段 属性 是直接映射到 FK table 列和查询中使用的此 属性 的值,例如对于 insert/update 操作。此 属性 还填充了 select.

  • 上的值
  • 协会属性有两个角色。首先是在 linq 查询中定义连接操作的简单方法。其次是使用 LoadWith 方法在 select 上加载此 属性 的值。 linq2db 不要将此 属性 的值用于任何其他用途。