Klasa modelu oraz ViewModel zapis danych do bazy.

0

Witam,
Mam prostą klasę POCO oraz klasę ViewModel ( gdzie mam dodane adnotacje do formularza), w jaki sposób mogę zapisać dane do bazy z użyciem EF, uwzględniając mój ViewModel ?
Jak w kontrolerze przekazuję moją klasę modelu to nie ma problemu, dane się zapiszą, ale wtedy nie uwzględnia ViewModelu.

przykładowy kod:

public class Account
    {
        public int AccountId { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
    }
public class AccountVM
    {
        [Required]
        public string Username { get; set; }
        public string Email { get; set; }
    }

// kontroler:

public ActionResult CreateAccount(AccountViewModel account)
        {
            if (ModelState.IsValid)
            {
                registerUser.InsertUser(account);
                return RedirectToAction("LoginPage", "Account");
            }
            return View(account);      
        }
1

i w kontrolerze w metodzie CreateAccount jak przekaże typ Account to dane z formularza zostaną zapisane w bazie, lecz te dane nie są weryfikowane,

Jeżeli chcesz weryfikować dane, to możesz użyć któregoś z tych

I teraz nie bardzo wiem jak uwzględnić klasę ViewModelu przy zapisie danych do bazy

A gdyby

registerUser.InsertUser(account);

przyjmowało UserName, Email?

Albo instancja klasy Account

public ActionResult CreateAccount(AccountViewModel formularz)
{
	if (ModelState.IsValid)
	{
		var account = new Account(formularz.UserName, formularz.Email);
		
		registerUser.InsertUser(account);
		return RedirectToAction("LoginPage", "Account");
	}
	return View(formularz);      
}
0

Czy tworzenie konstruktora w klasie modelu jest "normalną" rzeczą w pisaniu aplikacji ? ( w żadnych kursach się z tym nie spotkałem więc pytam, może słowo "normalną" jest nie na miejscu, ale nie wiedziałem jak to przenieść na klawiaturę).

Czy wszelkie operacje na bazie jak zapis, odczyt, edycja itp, powinno się wykonywać bezpośrednio z kontrolera czy sposób w jaki to zrobiłem czyli użycie osobne klasy jest lepszym rozwiązaniem ?

2

Czy tworzenie konstruktora w klasie modelu jest "normalną" rzeczą w pisaniu aplikacji ? ( w żadnych kursach się z tym nie spotkałem więc pytam, może słowo "normalną" jest nie na miejscu, ale nie wiedziałem jak to przenieść na klawiaturę).

Kursy zazwyczaj przedstawiają tylko mechanizmy oraz jak je używać, nic więcej. Jeśli poprzez model rozumiesz model zapisywany do bazy to tak, jak najbardziej normalne jest używanie konstruktorów z parametrami.

Czy wszelkie operacje na bazie jak zapis, odczyt, edycja itp, powinno się wykonywać bezpośrednio z kontrolera czy sposób w jaki to zrobiłem czyli użycie osobne klasy jest lepszym rozwiązaniem ?

Należy stosować tzw. persistence ignorance (ignorancja perzystencji). Twoje modele nie powinny nic wiedzieć o tym jak są przechowywane. Używanie oddzielnej "klasy", czyli serwisu/repozytorium/cokolwiek jest wskazane.

2

Czy tworzenie konstruktora w klasie modelu jest "normalną" rzeczą w pisaniu aplikacji ? ( w żadnych kursach się z tym nie spotkałem więc pytam, może słowo "normalną" jest nie na miejscu, ale nie wiedziałem jak to przenieść na klawiaturę).

Chyba nie chcemy, aby ktoś był w stanie utworzyć Usera bez np. Maila/Loginu(czy też hasła).

Chociaż, może być potrzebny bezparametrowy konstruktor aby ORM "ogarniał", ale wtedy można go oznaczyć jako protected - przynajmniej w EFCore.

Czy wszelkie operacje na bazie jak zapis, odczyt, edycja itp, powinno się wykonywać bezpośrednio z kontrolera czy sposób w jaki to zrobiłem czyli użycie osobne klasy jest lepszym rozwiązaniem

Tak, ogólnie uważa się, że kontrolery to nie miejsca na takie rzeczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1