Keresés

Új hozzászólás Aktív témák

  • moseras

    tag

    Sziasztok!

    Próbálom megérteni az Entity Framework 5/MVVM light/MySQL hármast. Első körben abban kérnék segítséget, hogy miként implementáljam azt, hogy az adatbázisban változás történt, és a ViewModel-em ezt észrevegye.

    Tehát nem arra gondolok, hogy a programom kívül valaki más módosítja az adatbázist, és azt vegye észre, hanem ha én módosítom, akkor azt lássam. Az DbContext-ből származó xxxEntities osztályban nem látok változás értesítő event-et. Tehát akkor nekem kell egy plusz réteget felhúzni a ViewModel és az Entities közé ?

    Eddig azt hittem, hogy maga az Entities-em a Model réteg, ezek szerint nem ?

    Más: ha valaki rajtam kívül futás közben módosítja a táblát, azt az Entity framework észreveszi ?

    Imi.

  • moseras

    tag

    válasz Goose-T #5225 üzenetére

    Üdv!

    "
    Ezt a "valaki rajtam kívül futás közben módosítja a táblát" mondatot mégis hogy értetted?
    "

    Pl. phpMyAdmin-ból beszúrok egy új rekordot, miközben fut a program

    Köszi!

    Imi.

  • moseras

    tag

    Sziasztok!

    MySQL-t használok Entity FrameWork 6-al. Működik, kivétel az async/await lehetőség, amit az EF6 elvileg tud.

    Kód:

    public void I2(List<data> dataList)
    {
    Debug.Print("I2 előtt");
    InsertAsync(dataList);
    Debug.Print("I2 után");
    }

    public async void InsertAsync(List<data> dataList)
    {
    using (var ctx = new adatgyujtesEntities())
    {
    ctx.Configuration.AutoDetectChangesEnabled = false;
    ctx.Configuration.ValidateOnSaveEnabled = false;

    foreach (var item in dataList)
    {
    ctx.data.Add(item);
    }

    Debug.Print("await előtt");
    await ctx.SaveChangesAsync();
    //await Task.Delay(4000);
    Debug.Print("await után");
    }
    }

    Ha az I2-t meghívom, akkor ezt kapom:

    I2 előtt
    await előtt
    await után
    I2 után

    Ha az await ctx.SaveChangesAsync(); sort kikommentezem, és helyette beteszem az await Task.Delay(4000);-t, akkor pedig ezt:

    I2 előtt
    await előtt
    I2 után
    await után

    Tehát mint ha a SaveChangesAsync szinkron működne ? Vagy valamit félreértek ?

    És még valami: a UI is akad rendesen, a SaveChangesAsync közben sem mozgatni, sem méretezni nem lehet az ablakot, de a Task.Delay közben működik a mozgatás/méretezés.

    Köszi!

    Imi.

    [ Szerkesztve ]

  • moseras

    tag

    válasz martonx #5308 üzenetére

    Szia!

    Úgy tudom, hogy mivel az InsertAsync async void-ként van megadva, ezért annak a hívóhoz vissza kell(ene) térnie a benne lévő await hatására (és persze az await indít egy új taszkot, aminek végeztével az await alatt folytatódik). Érdekesnek találnám, ha ez egyszer így, egyszer úgy működne. Arra is gondoltam, hogy esetleg a MySQL EF6 megvalósítása nem kerek valahol. Mivel a UI szál is teljesen lefagy a SaveChangeAsync alatt, ezért nem tudok másra gondolni, valami miatt szinkron módon ugyanabban a UI szálban fut.

    Imi.

  • moseras

    tag

    válasz moseras #5307 üzenetére

    Sziasztok!

    Akit esetleg érdekel, MySQL és EF6 async/await probléma átmeneti megoldása:

    E helyett

    await ctx.SaveChangesAsync();

    Ezt használva

    await Task.Factory.StartNew(() =>
    {
    ctx.SaveChanges();
    });

    külön szálon indul el, és a UI is reszponzív marad. Hogy miért van így, azt továbbra sem értem, de a lényeg, hogy így működik.

    Imi.

    [ Szerkesztve ]

  • moseras

    tag

    válasz RedHarlow #8731 üzenetére

    Üdv!

    List<string> words = new List<string> { "class", "xml", "xlsx", "teszt" };

    string patt = string.Join("|", words);
    Regex regex = new Regex(patt, RegexOptions.IgnoreCase);

    string v = "class asdfgh 123 xml8 xls xlsx15 xml xlsx";
    int appcount = regex.Matches(v).Count;
    Console.WriteLine(appcount);

    Azt írja ki, hogy 5

    [ Szerkesztve ]

  • moseras

    tag

    válasz RedHarlow #8738 üzenetére

    Üdv,

    Egyetértek az előttem hozzászólokkal, néhány megjegyzésem lenne:

    string filesdir = Path.Combine(@"C:\tmp", "files");

    // Összes
    Console.WriteLine("Összes");
    string[] files = Directory.GetFiles(filesdir);
    foreach (var item in files)
    {
    Console.WriteLine(item);
    }
    Console.WriteLine($"{files.Length} db");

    // A GetFiles szűrője alapján (a GetFiles nem támogatja a Regex-et)
    Console.WriteLine();
    Console.WriteLine("A GetFiles szűrője alapján");
    files = Directory.GetFiles(filesdir, "REF*.xml");
    foreach (var item in files)
    {
    Console.WriteLine(item);
    }
    Console.WriteLine($"{files.Length} db");

    // Regex-el tovább szűrve
    Console.WriteLine();
    Console.WriteLine("Regex-el tovább szűrve");
    Regex reg = new Regex(@"REF\w+\d+\w+\.xml", RegexOptions.IgnoreCase);
    var rfiles = Directory.GetFiles(filesdir, "REF*.xml")
    .Where(path => reg.IsMatch(path))
    .ToList();
    foreach (var item in rfiles)
    {
    Console.WriteLine(item);
    }
    Console.WriteLine($"{rfiles.Count} db");

    Eredmény:

    Összes
    C:\tmp\files\1.xml
    C:\tmp\files\REFblabxx00001xxxblabla.xml
    C:\tmp\files\REFblabxx00002xxxblabla.xml
    C:\tmp\files\REFblabxx00003xxxblabla.xml
    C:\tmp\files\REFblabxx00004xxxblabla.xml
    C:\tmp\files\REFblabxx00005xxxblabla.xml
    C:\tmp\files\REFFFFFFFFFFFF.xml
    7 db

    A GetFiles szűrője alapján
    C:\tmp\files\REFblabxx00001xxxblabla.xml
    C:\tmp\files\REFblabxx00002xxxblabla.xml
    C:\tmp\files\REFblabxx00003xxxblabla.xml
    C:\tmp\files\REFblabxx00004xxxblabla.xml
    C:\tmp\files\REFblabxx00005xxxblabla.xml
    C:\tmp\files\REFFFFFFFFFFFF.xml
    6 db

    Regex-el tovább szűrve
    C:\tmp\files\REFblabxx00001xxxblabla.xml
    C:\tmp\files\REFblabxx00002xxxblabla.xml
    C:\tmp\files\REFblabxx00003xxxblabla.xml
    C:\tmp\files\REFblabxx00004xxxblabla.xml
    C:\tmp\files\REFblabxx00005xxxblabla.xml
    5 db

    Innentől kezdve tényleg tudni kellene, hogy mit is akarunk szűrni, mert ugye a REFFFFFFFFFFFF.xml nem mindegy, hogy benne van e, vagy nincs, vagy a számok és a REF között kell e lennie még további karakternek, ha igen, milyennek, hány darabnak, stb. De szerintem innen már boldogulsz vele.

    Imi.

    [ Szerkesztve ]

  • moseras

    tag

    válasz kkdesign #8751 üzenetére

    Hello,

    Nem teljesen tiszta, hogy mit is akarsz pontosan, valami ilyenre gondoltál ?

    static int convert(List<int> l1)
    {
    int ret = 0;
    foreach (var e in l1)
    {
    ret *= 10;
    ret += e;
    }
    return ret;
    }

    static void Main(string[] args)
    {
    var szamok = new List<int>() { 0,0,1,5,7,3,0,0,1,2,3,0,0,5,8,7,4,5,0,1,2,5,8,9 };

    // Az eredeti számsorozat
    Console.WriteLine($"Az eredeti számsorozat: { string.Join("", szamok) }");

    // A nem 0 értékű számjegyek száma
    var c1 = szamok.Count(x => x != 0);
    Console.WriteLine($"A nem 0 értékű számjegyek száma: { c1 }");

    var temp = new List<int>();
    var leghosszabb_szamok = new List<int>();
    int maxx = 0;

    foreach (var item in szamok)
    {
    if (item != 0)
    {
    temp.Add(item);
    }
    else
    {
    if (temp.Count > 0 && temp.Count >= maxx)
    {
    leghosszabb_szamok = leghosszabb_szamok.Where(n => Math.Floor(Math.Log10(n) + 1) >= maxx).ToList();
    leghosszabb_szamok.Add(convert(temp));
    maxx = temp.Count();
    }
    temp.Clear();
    }
    }

    if (temp.Count > 0 && temp.Count >= maxx)
    {
    leghosszabb_szamok = leghosszabb_szamok.Where(n => Math.Floor(Math.Log10(n) + 1) >= maxx).ToList();
    leghosszabb_szamok.Add(convert(temp));
    }

    // A leghosszabb számjegyű szám(ok)
    Console.WriteLine($"A leghosszabb számjegyű szám(ok): { string.Join(", ", leghosszabb_szamok) }");

    // A leghosszabb számjegyű szám(ok) jegyeinek száma
    Console.WriteLine($"A leghosszabb számjegyű szám(ok) jegyeinek száma: { maxx }");
    }

    Eredmény:

    Az eredeti számsorozat: 001573001230058745012589
    A nem 0 értékű számjegyek száma: 17
    A leghosszabb számjegyű szám(ok): 58745, 12589
    A leghosszabb számjegyű szám(ok) jegyeinek száma: 5

    Ha jól értem, akkor neked kellene

    - az eredeti sorozat nem 0 elemeinek száma
    - a leghosszab jegyű szám(ok) külön listába gyűjtve
    - a leghosszab jegyű szám(ok) jegyeinek száma

    Imi.

    [ Szerkesztve ]

Új hozzászólás Aktív témák