1

私たちのプログラムでは、LLBLGENには約50以上のエンティティがあります。それらはすべて、ModifyDatetimeModifyUserIDという2つの列があります。これらは、SQLデータベースの各テーブルの最後の2列でもあります。

.Save()のLLBLGEN関数を変更して、セッション変数と、プログラマーが.Save()を実行するときにすべてのエンティティに送信される現在の時刻を設定します。

セッションのユーザーIDと日時を保存するために取得しましたが、場合によってはエラーが発生します。これは、レンダリング時またはコンパイル時に変更される列の位置に関係していると思います。

___Entity.cs(この場合はCityEntity.cs)の1つから2つのパブリック仮想関数をコピーし、別のエンティティタイプ(ServicesEntity.cs)を保存するときにも機能しました。したがって、しばらくの間、CityFieldIndex。*は単なるランダムな整数だと思いました。どちらのクラスにも、列の数が異なります。あるいは、このパブリックバーチャルとそれをオーバーライドする方法を完全に理解していないのかもしれません。

また、CityFieldIndexの代わりにRows.Count-1とRows.Count-2を送信してみました。*

また、SetModifyUserIdで奇妙なエラーが発生します。値33はタイプ'System.Int32'であり、フィールドはタイプ'System.Nullable`1 [System.DateTime]'(33はユーザーID)です。

CommonEntityBase.csのカスタムコードは次のとおりです。

public override bool Save(IPredicate updateRestriction, bool recurse)
{
      System.Diagnostics.Debug.WriteLine("i'm overriding SAVE yeii");
      ModifyDatetime = DateTime.Now;
      ModifyUserId = 33;

      return base.Save(updateRestriction, recurse);
}

public virtual Nullable<System.DateTime> ModifyDatetime
{
    get { return (Nullable<System.DateTime>)GetValue((int)CityFieldIndex.ModifyDatetime, false); }
    set { SetValue((int)CityFieldIndex.ModifyDatetime, value, true); }
}    

public virtual Nullable<System.Int32> ModifyUserId
{
    get { return (Nullable<System.Int32>)GetValue((int)CityFieldIndex.ModifyUserId, false); }
    set { SetValue((int)CityFieldIndex.ModifyUserId, value, true); }
}
4

1 に答える 1

0

私はそれを解決しました。
他の誰かがSave()を使用するたびに、セッションからユーザーを保存するようになりました。ユーザーが設定されていない場合は、UserId=0になります。

もちろん、ログインセッションを確認するためにアプリを閉じ、システムサービスのみが0を使用して保存します:)

 public override bool Save(IPredicate updateRestriction, bool recurse)
    {
        ModifyDatetime = DateTime.Now;
        int userID = 0;

        // Verifies the UserId that called the Save(). Uses 0 (as system user) when none is found.
        try
        {
            if (HttpContext.Current.Session["UserID"] != null)
            { userID = Convert.ToInt32(HttpContext.Current.Session["UserID"]); }

        }
        catch (NullReferenceException nullE)
        {
            userID = 0;
        }
        ModifyUserObjectId = userID;

        return base.Save(updateRestriction, recurse);
    }

    /// <summary> The ModifyDatetime property of all Entities<br/><br/></summary>
    /// <remarks>All tables must have the field: *table*."modifyDatetime"<br/>
    public virtual Nullable<System.DateTime> ModifyDatetime
    {
    //    get { return (Nullable<System.DateTime>)GetValue((int)base.Fields["ModifyDatetime"].FieldIndex, false); }  // uncomment for GET
        set { SetValue((int)base.Fields["ModifyDatetime"].FieldIndex, value, true); }
    }

    /// <summary> The ModifyUserObjectId property of all Entities<br/><br/></summary>
    /// <remarks>All tables must have the field: *table*."modifyUser_objectID"<br/>
    public virtual Nullable<System.Int32> ModifyUserObjectId
    {
    //    get { return (Nullable<System.Int32>)GetValue((int)base.Fields["ModifyUserObjectId"].FieldIndex, false); }  // uncomment for GET
        set { SetValue((int)base.Fields["ModifyUserObjectId"].FieldIndex, value, true); }
    }

それがコレクションで機能するかどうかはまだわかりません。ただし、同じコードである必要があります。

于 2012-12-08T21:02:23.703 に答える