2013-05-20 2 views
0

Я пытаюсь понять, как создать ViewModel, который содержит свойства класса в моей модели домена, а также свойства родительского класса.Создание ViewModel, который содержит свойства родительского класса в ASP.NET MVC

Я хочу иметь ViewModel, который содержит все LoadSession свойства иTradingPartner Описание, но я не уверен, как отобразить все это вверх в ViewModel. Любая помощь или совет будут очень признательны.

Это мой основной класс я ACCESSING имени LoadSession:

public partial class LoadSession 
{ 
    public LoadSession() 
    { 
     this.AcceptedTransactions = new HashSet<AcceptedTransaction>(); 
     this.RejectedTransactions = new HashSet<RejectedTransaction>(); 
    } 

    public int LoadSessionId { get; set; } 
    public int Import { get; set; } 
    public string FilePath { get; set; } 
    public string TradingPartnerBatchId { get; set; } 
    public System.DateTime Started { get; set; } 
    public int RecordsOnFile { get; set; } 
    public int RecordsAfterGroupFilter { get; set; } 
    public int RecordsAccepted { get; set; } 
    public int RecordsRejected { get; set; } 
    public System.DateTime Completed { get; set; } 
    public bool Success { get; set; } 
    public Nullable<int> Extract { get; set; } 

    public virtual ICollection<AcceptedTransaction> AcceptedTransactions { get; set; } 
    public virtual Extract Extract1 { get; set; } 
    public virtual Import Import1 { get; set; } 
    public virtual ICollection<RejectedTransaction> RejectedTransactions { get; set; } 
} 

Свойство импорта является внешним ключом для этого Импорт класса (Import = ImportId):

public partial class Import 
{ 
    public Import() 
    { 
     this.GroupPlans = new HashSet<GroupPlan>(); 
     this.ImportGroups = new HashSet<ImportGroup>(); 
     this.MatchingGroups = new HashSet<MatchingGroup>(); 
     this.LoadSessions = new HashSet<LoadSession>(); 
    } 

    public int ImportId { get; set; } 
    public string Description { get; set; } 
    public int Format { get; set; } 
    public int Interface { get; set; } 

    public virtual Interface Interface1 { get; set; } 
    public virtual Format Format1 { get; set; } 
    public virtual ICollection<GroupPlan> GroupPlans { get; set; } 
    public virtual ICollection<ImportGroup> ImportGroups { get; set; } 
    public virtual ICollection<MatchingGroup> MatchingGroups { get; set; } 
    public virtual ICollection<LoadSession> LoadSessions { get; set; } 
} 

Свойство Interface является внешним ключом для этого Интерфейс класс (Interface = InterfaceId):

public partial class Interface 
{ 
    public Interface() 
    { 
     this.Extracts1 = new HashSet<Extracts1>(); 
     this.Imports = new HashSet<Import>(); 
    } 

    public int InterfaceId { get; set; } 
    public string Description { get; set; } 
    public int TradingPartner { get; set; } 

    public virtual ICollection<Extracts1> Extracts1 { get; set; } 
    public virtual ICollection<Import> Imports { get; set; } 
    public virtual TradingPartner TradingPartner1 { get; set; } 
} 

И свойство TradingPartner является внешним ключом для этого TradingPartner класса (TradingPartner = TradingPartnerId):

public partial class TradingPartner 
{ 
    public TradingPartner() 
    { 
     this.Interfaces = new HashSet<Interface>(); 
    } 

    public int TradingPartnerId { get; set; } 
    public string Description { get; set; } 

    public virtual ICollection<Interface> Interfaces { get; set; } 
} 

ответ

0

Ну, те все ваши домена объекты права ...

Создать репозиторий, который принимает объект домена и затем преобразует его в модель представления с необходимыми свойствами ...

Я не уверен, что это ваши потребности вида, но из ваших заявлений вы заявляете, что вы хотите свойство нагрузки сессии + TradingPartner.Description Так что создать что-то вроде этого ...

public class LoadSessionTradingPrtNrVM 
{ 
    public LoadSession() 
    { 
     this.AcceptedTransactions = new HashSet<AcceptedTransaction>(); 
     this.RejectedTransactions = new HashSet<RejectedTransaction>(); 
    } 

    public int LoadSessionId { get; set; } 
    public int Import { get; set; } 
    public string FilePath { get; set; } 
    public string TradingPartnerBatchId { get; set; } 
    public System.DateTime Started { get; set; } 
    public int RecordsOnFile { get; set; } 
    public int RecordsAfterGroupFilter { get; set; } 
    public int RecordsAccepted { get; set; } 
    public int RecordsRejected { get; set; } 
    public System.DateTime Completed { get; set; } 
    public bool Success { get; set; } 
    public Nullable<int> Extract { get; set; } 
    public string Description { get; set; } 

    public virtual ICollection<AcceptedTransaction> AcceptedTransactions { get; set; } 
    public virtual Extract Extract1 { get; set; } 
    public virtual Import Import1 { get; set; } 
    public virtual ICollection<RejectedTransaction> RejectedTransactions { get; set; } 
} 

Чтобы получить из моделей домена в ViewModels вы будете использовать репозиторий , или какой-либо другой шаблон, который берет то, что вы получаете из своей базы данных, и преобразует его в то, что вам нужно для ваших просмотров.

Это своего рода сырье, но теория должна провести ...

public class DataRepository { 

     LoadSessionTradingPrtNrVM TransformToVM(LoadSession inputA, TradingPartner inputB){ 
      LoadSessionTradingPrtNrVM newOBJ = new LoadSessioNTradingPrtNrVM(); 
      newOBJ.LoadSessionId = ipnutA.LoadSessionID; 
      newOBJ.Import = inputA.Import 
      //Here is the property from your Transform object 
      newOBJ.Description = inputB.Description 
      //... Continue to transform one object into the other... 
      //You could add as many members from as many different objects as you want into 
      //Your view model following that pattern. 
     } 
} 

у меня не было шанса, чтобы запустить это через C# компилятор, но вы должны получить общее представление. Я уверен, что есть более элегантный образец, который может выполнить одно и то же. Но это приличное решение с моей головы.

0

Другим вариантом является включение объектов модели домена в качестве свойств в модели представления. Например:

// View model. 
public class UserViewModel 
{ 
    public AddressModel Address; // Assuming "AddressModel" is a doman model. 
    public string FirstName; 
    public string LastName; 
} 

И с точки зрения вы можете получить доступ к свойствам как:

@Model.Address.AddressLine1 
@Model.Address.City 
// etc... 

Помощники Html справиться с этим очень хорошо, но если вы вручную наименования входов на ваш взгляд, не стоит забывать чтобы настроить эти имена для соответствия.

Смежные вопросы