Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191

    [MVC3] Conversione modelli Overflow

    ho due modelli:
    codice:
        [Table("Account")]
        public class dbAccount
        {
            [Key]
            public int AccountID { get; set; }
            public string UserName { get; set; }
            public string Password { get; set; }
            public string Email { get; set; }
            public string Name { get; set; }
            public string Surname { get; set; }
            public bool IsEnabled { get; set; }
            public virtual ICollection<dbRole> Roles { get; set; }
        }
    
        [ResourceDisplayName("Account")]
        public class vmAccount
        {
            [Key]
            [ResourceDisplayName("Account.AccountID")]
            public int AccountID { get; set; }
    
            [ResourceRequired]
            [ResourceDisplayName("Account.UserName")]
            public string UserName { get; set; }
    
            [ResourceRequired]
            [DataType(DataType.Password)]
            [ResourceDisplayName("Account.Password")]
            public string Password { get; set; }
    
            [ResourceRequired]
            [ResourceEmail]
            [ResourceDisplayName("Account.Email")]
            public string Email { get; set; }
    
            [ResourceRequired]
            [ResourceDisplayName("Account.Name")]
            public string Name { get; set; }
    
            [ResourceDisplayName("Account.Surname")]
            public string Surname { get; set; }
    
            [ResourceDisplayName("Account.IsEnabled")]
            public bool IsEnabled { get; set; }
    
            [ResourceDisplayName("Roles")]
            public virtual ICollection<vmRole> Roles { get; set; }
        }
    e
    codice:
        [Table("Role")]
        public class dbRole
        {
            [Key]
            public int RoleID { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public virtual ICollection<dbAccount> Accounts { get; set; }
            public virtual ICollection<dbPermission> Permissions { get; set; }
        }
    
        [ResourceDisplayName("Role")]
        public class vmRole
        {
            [Key]
            [ResourceDisplayName("Role.RoleID")]
            public int RoleID { get; set; }
    
            [ResourceDisplayName("Role.Name")]
            public string Name { get; set; }
    
            [ResourceDisplayName("Role.Description")]
            public string Description { get; set; }
    
            [ResourceDisplayName("Accounts")]
            public virtual ICollection<vmAccount> Accounts { get; set; }
        }
    il problema esce quando devo fare un a conversione da dbAccount a vmAccount con il seguente metodo:

    codice:
            public static List<vmAccount> to_vmAccounts(IEnumerable<dbAccount> dbAccounts)
            {
                List<vmAccount> vmAccounts = new List<vmAccount>();
                foreach (dbAccount dbAccount in dbAccounts)
                    vmAccounts.Add(to_vmAccount(dbAccount));
                return vmAccounts;
            }
            public static vmAccount to_vmAccount(dbAccount dbAccount)
            {
                vmAccount vmAccount = new vmAccount()
                {
                    AccountID = dbAccount.AccountID,
                    UserName = dbAccount.UserName,
                    Password = dbAccount.Password,
                    Email = dbAccount.Email,
                    Name = dbAccount.Name,
                    Surname = dbAccount.Surname,
                    IsEnabled = dbAccount.IsEnabled,
                    Roles = RoleService.to_vmRoles(dbAccount.Roles)
                };
                return vmAccount;
            }
    
            public static List<vmRole> to_vmRoles(IEnumerable<dbRole> dbRoles)
            {
                List<vmRole> vmRoles = new List<vmRole>();
                foreach (dbRole dbRole in dbRoles)
                    vmRoles.Add(to_vmRole(dbRole));
                return vmRoles;
            }
            public static vmRole to_vmRole(dbRole dbRole)
            {
                vmRole vmRole = new vmRole()
                {
                    RoleID = dbRole.RoleID,
                    Name = dbRole.Name,
                    Description = dbRole.Description,
                    Accounts = AccountServices.tovmAccounts(dbRole.Accounts)
                };
                return vmRole;
            }
    L'applicazione va in OVerflow ...

    Qualche soluzione???

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    to_vmaccount chiama to_vmrole e viceversa, entrando in un ciclo di chiamate infinito l'applicazione va in stackoverflow.

    Questo succede perche stai interpretando male il ruolo del viewmodel. Il VM non è un copia incolla di un entità ma è una classe di supporto per una VIEW. Ne devi avere uno per ogni view non uno per ogni entità sottostante. Il fatto che al 90% una view tratta un entità non significa che tra vm ed entity ci debba essere corrispondenza 1:1. La corrispondenza 1:1 è tra View e VieModel.
    Il viemodel quindi va "cucito addosso" alla view e non all'entity.

  3. #3
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    Grazie mille!!!


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.