كيف يمكنني الحصول على قيمة عمود الهوية المرتبطة بإدراج 3 linqtemplate Subsic 3؟

StackOverflow https://stackoverflow.com/questions/1576451

  •  21-09-2019
  •  | 
  •  

سؤال

أنا أستخدم Subong 3.0.0.3 جنبا إلى جنب مع قوالب LINQ T4. على سبيل المثال ، يحتوي ProjectRepository على الطريقتين التاليتين:

public int Add(Project item)
{
    int result = 0;
    ISqlQuery query = BuildInsertQuery(item);

    if (query != null)
    {
       result = query.Execute();
    }
    return result;
}

private ISqlQuery BuildInsertQuery(Project item)
{
    ITable tbl = FindTableByClassName();

    Insert query = null;
    if (tbl != null)
    {
        Dictionary<string, object> hashed = item.ToDictionary();
        query = new Insert(_db.Provider).Into<Project>(tbl);

        foreach (string key in hashed.Keys)
        {
            IColumn col = tbl.GetColumn(key);
            if (col != null)
            {
                if (!col.AutoIncrement)
                {
                    query.Value(key, hashed[key]);
                }
            }
        }
    }

    return query;
}

جنبا إلى جنب مع أداء الإدراج (الذي يعمل بشكل رائع) ، أود حقًا الحصول على قيمة عمود التسليح التلقائي. بالنسبة للسجل ، يكون هذا العمود هو المفتاح الأساسي وعمود الهوية. هل ربما هناك وسيلة لإلحاق "SELECT SCOPE_IDINGITY () ؛" إلى الاستعلام أو ربما هناك نهج مختلف تمامًا يجب أن أجربه؟

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك باستخدام قوالب ActivereCord التي تقوم بكل الأسلاك أعلاه بالنسبة لك (وكذلك الاختبارات المدمجة). في السيناريو الخاص بك ، سيكون لأسلوب إضافة سطر واحد: project.add () وسيعود المعرف الجديد.

لاحتياجاتك ، يمكنك تجربة هذا:

var cmd=query.GetCommand();
cmd.CommandSql+=";SELECT SCOPE_IDENTITY() as newid";
var newID=query.Provider.ExecuteScalar(cmd);

التي يجب أن تعمل..

*تحرير - يمكنك إنشاء ملحق method لهذا على isqlquery أيضًا ، لحفظ بعض الكتابة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top