WCF + WPF + EF operacje na modelach

0

Witam, tworze aplikacje korzystając z wzorca Mvvm. Architektura aplikacji wygląda następująco:

  1. WPF - wersja desktopowa aplikacji, która łączy się z WCF aby dokonywac operacji na bazie danych.
  2. WCF - posiada połączenie z baza danych poprzez EF
  3. EF - podejscie Database First

Mam problem dotyczący dodania nowego usera.
Przechwytywanie.PNG

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

0

Czy na prawdę nikt nie ma żadnych rad, chociaż jakiś mały punkt zaczepienia bo stanąłem w miejscu.

0

Może stwórz ten obiekt taki jaki jest wymagany i wszystkie pola przepisz?

1
Rejencina napisał(a):

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.

Twórz tych serwisów ile chcesz ale model to musisz mieć spójny nie widzę sensu w tworzeniu dla każdego serwisu osobnego modelu.

0

Z tym ze ja mam jeden jedyny model po stronie WCF'a. I kazdy servis korzysta wlasnie z niego. A moze by tak uzyc automapera po stronie WPF'a ktory bedzie konwertowal nasz model wcf na model wpf?

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