EF - migrace při změně modelu   zodpovězená otázka

C#, Entity Framework, Databáze

Ahoj, mám takovýto hypoteticý model:

class Person
{
    public int Id {get;set;}
    public string Name {get;set;}
}

class Course
{
    public int Id {get;set;}
    public Person Teacher {get;set;}
}

a potřebuji změnit model na následující


class Person
{
    public int Id {get;set;}
    public string Name {get;set;}
}

class Course
{
    public int Id {get;set;}
    public ICollection<Person> Teachers {get;set;}
}

Mám localdb databázi, přístup code-first a potřeboval bych tu změnu provést se zachováním dat. Migrace jsem ještě nikdy dělat nemusel, tak se chci zeptat, jestli mi EF zajistí přesun dat (vzhledem k tomu, že se bude muset změnit DB schéma) do příslušných tabulek nějak automaticky?

Nebo to mám radši vyřešit nějakým ručním SQL přesunem na úrovni sql server?

Nebo se to snad dělá úplně jinak? Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

EF nic takového sám nezajistí.

Můj doporučený postup je upravit si databázi a data ručně pomoci Management studia a SQL skriptů a v aplikaci pak upravit třídy entit tak, aby model odpovídal nové podobě databáze.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky, trochu jsem čekal, že si to budu muset udělat ručně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V prvním případě je předpokládám ještě FK na Course (odkaz na TeacherId), zatímco po změně se mění vztah a FK bude na Teacher a bude odkazovat na Course. Kdybych nechtěl přijít o data a měl manuální migrace, udělal bych to na více kroků. Je to sice trochu obskurní, vyžaduje to trochu synchronizaci a vždy záleží na scénáři ale obvykle je to bezpečné řešení.

1/ vytvoření nových entit (které nebudou použité) s nekonvenčními názvy (Person == PersonXX) a MIGRACE + UPDATE DB

class Person
{
    public int Id {get;set;}
    public string Name {get;set;}
}
 
class Course
{
    public int Id {get;set;}
    public Person Teacher {get;set;}
    public ICollection<PersonXX> Teachers {get;set;}
}

2/ změna C# kódu tak, aby nově používal nové schéma (nekonvenční PersonXX) a MIGRACE

do migrace ručně dopsat přelití dat z původních tabulek do nových (nekonvenčních) UPDATE DB

3/ likvidace zbytečných entit MIGRACE

4/ přejmenování nekonvenčních názvů na sémantické MIGRACE UPDATE DB

***

V případě automatických migrací je to podobný ale přelití dat se musí udělat ručně na SQL Serveru, což vyžaduje větší synchronizaci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback