Witam, tworze aplikacje korzystając z wzorca Mvvm. Architektura aplikacji wygląda następująco:
- WPF - wersja desktopowa aplikacji, która łączy się z WCF aby dokonywac operacji na bazie danych.
- WCF - posiada połączenie z baza danych poprzez EF
- EF - podejscie Database First
Mam problem dotyczący dodania nowego usera.
Mój WCF posiada kilka servisów w tym wypadku CompanyService, UserService
public class CompanyService : ICompanyService
{
public bool AddCompany(companies company)
{
using (Entities context = new Entities())
{
context.companies.Add(company);
context.SaveChanges();
}
return true;
}
public companies GetCompany(string companyName)
{
using (Entities context = new Entities())
{
context.Configuration.ProxyCreationEnabled = false;
return context.companies.Where(c => c.Name.Equals(companyName)).FirstOrDefault();
}
}
}
public class User : IUserService
{
public bool AddUser(users user)
{
int dodano = 0;
using (Entities context= new Entities ())
{
context.users.Add(user);
dodano = context.SaveChanges();
}
if (dodano > 0)
{
return true;
}
else
{
return false;
}
}
}
W moim ViewModel'u pobieram obiekt Company z SERWISU CompanyService i przekazuję go do metody RegisterUser(), która to tworzy obiekt User i wywołuje metodę z UserService AddUser.
private void RegisterCommandExecute()
{
RegisterCompany();
var company = new CompanyService.companies();
company = GetCompany(CompanyName);
RegisterUser(company);
}
private void RegisterCompany()
{
var company = new CompanyService.companies();
company.Name = CompanyName;
var companyService = new CompanyService.CompanyServiceClient();
companyService.AddCompany(company);
companyService.Close();
}
private CompanyService.companies GetCompany(string comapnyName)
{
var company = new CompanyService.companies();
var companyService = new CompanyService.CompanyServiceClient();
company = companyService.GetCompany(CompanyName);
companyService.Close();
return company;
}
private void RegisterUser(CompanyService.companies company)
{
var user = new MvvmLight1.UserService.users();
user.Login = Login;
user.Password = Password;
user.Firstname = FirstName;
user.Lastname = LastName;
user.companies = company; //BŁĄD NIEZGODNOŚĆ TYPÓW! User.companies oczekuje obiektu company z serwisu UserService
var userService = new UserService.UserServiceClient();
userService.AddUser(user);
}
Cały proces zaczyna się w metodzie RegisterCommandExecute(). Problem został oznaczony w komentarzem w kodzie. Polega na niezgodności typu z modelu Users. Zastanawiam się czy podejście jest prawidłowe? Wiem, że mógłbym temu problemu zapobiec używając jednego serwisu do WCF. Jednakże nie chcę tego robić gdyż wolę dzielić kod na mniejsze moduły. Dlatego jak poprawnie korzystać z serwisów w którym model korzysta z innego modelu, tak jak w tym wypadku!
Pozdrawiam