Diskuze: Kopírování dat v databázi
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nejsem grammar nazi, ale to co vytvářís mi opravdu vypaluje oči.
Protože to po sobě v tom pidi editoru nečtu. A když to odešlu a vidím to tak jak to je, tak to tady nevím proč nejde editovat. Prostě ruka je někdy rychlejší než myšlenka. Ale ta "KOPIJE" se teda opravdu extrémně povedla to uznávám
Ahoj. Hledal jsem to na netu, ale nepochopil jak to použít v mém případě. Můžeš mi poradit?
Kolekce jsou:
ObservableCollection<TFireApparat> FireApparats { get; set;}
ObservableCollection<TObject> Objects { get; set;}
ObservableCollection<TRevision> Revisions { get; set;}
ObservableCollection<TApparatRevision> ApparatRevisionss { get;
set;}
využívám EF 6.
Díky
Tvuj problem nema nic spolecneho s kolekcemi a uz vubec ne s WPF. Je to ciste o tom jak kopirovat data pomoci EF. A doporucuju nepouzivat zadny automaticky deep copy mechanismy ale udelat to poctive rucne..
Tedy proste na hloupo udelat:
db.Necos.add(new Neco{
Name = old.Name,
LastName = old.LastName
});
atd.
Zkoušel jsem to takto, ale taky nic:
public void CloneApparat()
{
var x = context.TFireApparats.AsNoTracking().Where(a =>
a.TLocation.TObject.ObjectId == 2);
context.TApparatRevisions.Add(x);
}
Ale je tam výjimka u proměnné x:
Nejde převést z System.Linq.IQueryable<Hasící_přístroje.Models.TFireApparat> na Hasící_přístroje.Models.TApparatRevision.
tady to máš
https://csharp.2000things.com/tag/deep-copy/
Jde o to že pro datové typy které se nepředávají hodnotou jako je třeba (integer) ale odkazem jako je třeba class, je pro vytvoření jejich hluboké kopie nutné vytvořit objekt nový se shodnýma parametrama. Ovšem je třeba dát pozor na to že pokud jsou jakoby zanořené do sebe další a další tak pro úplnou hlubokou kopii musíš vytvářet nové objekty i na všechny zanořené objekty předávané odkazem.
Představ si to jako když máš třeba krabici s kuličkama. můžeš ji položit na jedno místo (objekt v paměti) a všem komu potřebuješ řekneš kde je (předáš referenci) a od teď každý kdo ví kde je může s těma kuličkama manipulovat(přidat,ubrat,natřít) ale všichni mění pořád ty kuličky ve stejné krabici na stejném nístě.
Naproti tomu hodnotou znamená že každému dáš svojí vlastní krabici s kuličkama a potom ale nikdo z ostatních nemůže mannipulovat s krabicí někoho jiného protože neví kde jsou. A tím je dané že ve finále můž každá krabice mít jiný obsah.
A ješte se ti může stát že každému dáš sice svojí krabici s kuličkama, ale do každé krabice vložíš lísteček s textem červená kulička je ve sklepě. Potom každý má všechny kuličky svoje vlastní kromě té jedné, která je ve sklepě a je společná pro všechny. No a když chceš aby měl každý i tu kuličku ve sklepě vlastní tak ji vytvoříš novou.
Ja bych mu nejradeji poradil, at se na to vykasle a executne radeji SQLko.. Protoze to v EF budto udela na hovno a nebude to fungovat (nedá si pozor na FKcka, na cyklicke reference LIST->Parent object, na change tracking, narusi optimistic coherency a dalsi veci).
Zobrazeno 11 zpráv z 11.