SORU
16 NİSAN 2009, PERŞEMBE


Nasıl İşlem SQL için bir SERİ oluşturmak için?

Birden fazla ekler içeren bir kod parçası var ama bir Kimliği elde edebilirim, diğer tablolar ekleme bitirmeden önce submitchanges yöntemi uygulamak gerekiyor. İnternet üzerinden arıyor ve seri bir işlem için sql oluşturmak için nasıl-ebil bulmak. İşlem yer almak istiyorum kod açıklama koyduk.

    var created = false;
    try
    {
        var newCharacter = new Character();
        newCharacter.characterName = chracterName;
        newCharacter.characterLevel = 1;
        newCharacter.characterExperience = 0;
        newCharacter.userUsername = userUsername;
        newCharacter.characterClassID = ccslst[0].characterClassID;
        //Open transaction


            ydc.Characters.InsertOnSubmit(newCharacter);
            ydc.SubmitChanges();

            foreach (var ccs in ccslst)
            {
                var cs = new CharacterStat();
                cs.statId = ccs.statID;                        
                cs.statValue = ccs.statValue;
                cs.characterID = newCharacter.characterID;
                ydc.CharacterStats.InsertOnSubmit(cs);
            }                    


            var ccblst = ydc.ClassBodies.Where(cb => cb.characterClassID == newCharacter.characterClassID);
            foreach (var ccb in ccblst)
            {
                var charBody = new CharacterBody();
                charBody.bodyId = ccb.bodyId;
                charBody.bodyPartId = ccb.bodyPartId;
                charBody.characterID = newCharacter.characterID;
                ydc.CharacterBodies.InsertOnSubmit(charBody);
            }
            ydc.SubmitChanges();      
            created = true;
        //Commit transaction
        }
        catch (Exception ex)
        {
            created = false;
            //transaction Rollback;                    
        }
        return created;

EDİT: ydc benim datacontext olduğunu söylemeyi Unutmuşum

CEVAP
16 NİSAN 2009, PERŞEMBE


Bir Current tamamını sarın. Arama işlem.() Tam teslim etmek istediğiniz noktada. Kod çıkar olmaksızın Tam blok (varsa) denilen, işlem geri alınır. Ancak, @s_ruchit cevabı bakıyor ve yeniden incelenmesi kodunuzu sonra, muhtemelen bu bir Current gerektirecek yazabilirsiniz. İlk örnek olarak kod ile Current kullanır. İkinci örnek, bazı küçük değişiklikler yapar, ama aynı amacı gerçekleştirir.

Bu Current kullanmak gerekir bir yere veritabanından bir değer okumak ve bir nesne üzerinde yeni bir değer ayarlamak için kullanırken ekleniyor. Bu durumda SERİ hareket önce okuyun, sonra yeni değeri göndermek yetmez. Beri kullanıyorsunuz değeri okumak hesaplamak için yeni bir değer yazmak gerekir okuyun sarılır aynı işlem emin olmak için başka bir okuyucu değil hesapla aynı değer ve önlemek senin değiştirin. Senin durumunda sadece standart SERİ hareket çalışmalıdır yazar yapıyorsun.

Örnek 1:

var created = false;

using (var transaction = new TransactionScope())
{
    try
    {
        var newCharacter = new Character();
        newCharacter.characterName = chracterName;
        newCharacter.characterLevel = 1;
        newCharacter.characterExperience = 0;
        newCharacter.userUsername = userUsername;
        newCharacter.characterClassID = ccslst[0].characterClassID;

        ydc.Characters.InsertOnSubmit(newCharacter);
        ydc.SubmitChanges();

        foreach (var ccs in ccslst)
        {
            var cs = new CharacterStat();
            cs.statId = ccs.statID;                        
            cs.statValue = ccs.statValue;
            cs.characterID = newCharacter.characterID;
            ydc.CharacterStats.InsertOnSubmit(cs);
        }                    

        var ccblst = ydc.ClassBodies.Where(cb => cb.characterClassID == newCharacter.characterClassID);
        foreach (var ccb in ccblst)
        {
            var charBody = new CharacterBody();
            charBody.bodyId = ccb.bodyId;
            charBody.bodyPartId = ccb.bodyPartId;
            charBody.characterID = newCharacter.characterID;
            ydc.CharacterBodies.InsertOnSubmit(charBody);
        }
        ydc.SubmitChanges();      
        created = true;

        transaction.Complete();
    }
    catch (Exception ex)
    {
        created = false;
    }
}
return created;

Örnek 2:

    try
    {
        var newCharacter = new Character();
        newCharacter.characterName = chracterName;
        newCharacter.characterLevel = 1;
        newCharacter.characterExperience = 0;
        newCharacter.userUsername = userUsername;
        newCharacter.characterClassID = ccslst[0].characterClassID;

        ydc.Characters.InsertOnSubmit(newCharacter);

        foreach (var ccs in ccslst)
        {
            var cs = new CharacterStat();
            cs.statId = ccs.statID;                        
            cs.statValue = ccs.statValue;
            newCharacter.CharacterStats.Add(cs);
        }                    

        var ccblst = ydc.ClassBodies.Where(cb => cb.characterClassID == newCharacter.characterClassID);
        foreach (var ccb in ccblst)
        {
            var charBody = new CharacterBody();
            charBody.bodyId = ccb.bodyId;
            charBody.bodyPartId = ccb.bodyPartId;
            newCharacter.CharacterBodies.Add(charBody);
        }
        ydc.SubmitChanges();      
        created = true;
    }
    catch (Exception ex)
    {
        created = false;
    }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dion Coulls

    Dion Coulls

    16 AĞUSTOS 2006
  • Joanna Okrajni

    Joanna Okraj

    4 EYLÜL 2010
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006