0

「グループ」テーブルと、必要な ApplicationID フィールドを含む子「ApplicationsGroupsLK」テーブルを持つ次のエンティティ フレームワーク コード スニペットがあります。

IEnumerable<Groups> Groups = DbContext.Groups.Include("ApplicationsGroupsLK").Where(p => p.GroupNumber > 0);

子データは明らかにコレクションに返されます。

基本的に、親データを子 ApplicationID フィールド (1 つのグループに多くのアプリケーション) と共に表示する必要があります。

私の MVC ビューでは、グリッドに適切にバインドできるようにするために必要な親データと子データが返される ViewModel はどのように見えるでしょうか?

2 番目の投稿:

さらに、Entity Framework から次のモデルが生成されました。

public partial class Project
    {
        public Project()
        {
            this.TimeTrackings = new HashSet<TimeTracking>();
        }

     [DataMember]
        public short ProjectID { get; set; }
     [DataMember]
        public short CustomerID { get; set; }
     [DataMember]
        public string Name { get; set; }
     [DataMember]
        public string Description { get; set; }
     [DataMember]
        public short CategoryID { get; set; }
     [DataMember]
        public short PriorityID { get; set; }
     [DataMember]
        public short StatusID { get; set; }
     [DataMember]
        public Nullable<decimal> Quote { get; set; }
     [DataMember]
        public string Notes { get; set; }
     [DataMember]
        public System.DateTime CreatedDate { get; set; }
     [DataMember]
        public Nullable<System.DateTime> UpdatedDate { get; set; }

     [DataMember]
        public virtual Category Category { get; set; }
     [DataMember]
        public virtual Customer Customer { get; set; }
     [DataMember]
        public virtual Priority Priority { get; set; }
     [DataMember]
        public virtual Status Status { get; set; }
     [DataMember]
        public virtual ICollection<TimeTracking> TimeTrackings { get; set; }
    }

TimeTrackings が Project の子テーブルであることがわかります。また、CategoryID、CustomerID、PriorityID、および StatusID は、親テーブルが持つ外部キーであることもわかります。この場合、CategoryID FK のみに関心があります。

私はまだこれを行っていません (自宅のマシンではありません) が、このモデルにデータを取り込むと、パブリック仮想カテゴリ カテゴリ フィールドに実際に何が含まれるでしょうか? コレクションではないため、クエリの実行後にこのフィールドに返されるデータ。

3 番目の投稿: DB 呼び出しの mvc 構文の Telerik asp.net:

IEnumerable<Groups> GroupList = db.GetGroups();

            return View(new GridModel<Groups>
            {
                Data = GroupList
            });

4 番目の投稿: Trey さん、以下は私が目的のために変更したコードであり、実装する前に確認できることを望んでいました。私はそれを理解していると思います、そして素晴らしいようです...

public partial class Project
    {
        public Project()
        {
            this.TimeTrackings = new HashSet<TimeTracking>();
        }

     [DataMember]
        public short ProjectID { get; set; }
     [DataMember]
        public short CustomerID { get; set; }
     [DataMember]
        public string Name { get; set; }
     [DataMember]
        public string Description { get; set; }
     [DataMember]
        public short CategoryID { get; set; }
     [DataMember]
        public short PriorityID { get; set; }
     [DataMember]
        public short StatusID { get; set; }
     [DataMember]
        public Nullable<decimal> Quote { get; set; }
     [DataMember]
        public string Notes { get; set; }
     [DataMember]
        public System.DateTime CreatedDate { get; set; }
     [DataMember]
        public Nullable<System.DateTime> UpdatedDate { get; set; }
     [DataMember]
        public short ApplicationID { get; set; }
     [DataMember]
        public string ApplicationName { get; set; }
     [DataMember]
        public virtual Category Category { get; set; }
     [DataMember]
        public virtual Customer Customer { get; set; }
     [DataMember]
        public virtual Priority Priority { get; set; }
     [DataMember]
        public virtual Status Status { get; set; }
     [DataMember]
        public virtual ICollection<TimeTracking> TimeTrackings { get; set; }


     public ProjectModel(Project project)
     {
        ProjectID = project.ProjectID;
        CustomerID = project.CustomerID;
        Name = project.Name;
        Description = project.Description;
    CategoryID = project.CategoryID;
        PriorityID = project.PriorityID;
        StatusID = project.StatusID;
        Quote = project.Quote;
        Notes = project.Notes;
        CreatedDate = project.CreatedDate;
        UpdatedDate = project.UpdatedDate;
        ApplicationID = project.ApplicationsGroupsLK.ApplicationID;
        ApplicationName = project.ApplicationsGroupsLK.ApplicationName;
     }


     // Neat Linq trick to convert database query results directly to Model
     public static IList<ProjectModel> FlattenToThis(IList<Project> projects)
     {
        return projects.Select(project => new ProjectModel(project)).ToList();
     }

    }

5 番目の投稿:

using (wmswebEntities DbContext = new wmswebEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    IEnumerable<Projects> projects = DbContext.Projects.Where(p => p.GroupNumber > 0);

                    IList<ProjectModel> results = Project.FlattenToThis(projects);

                    return results

}

6 番目のポストの名前空間 CMSEFModel { システムを使用して; System.Collections.Generic の使用;

public partial class GroupModel
{
    public GroupModel()
    {
        this.ApplicationsGroupsLKs = new HashSet<ApplicationsGroupsLK>();
        this.GroupApplicationConfigurationsLKs = new HashSet<GroupApplicationConfigurationsLK>();
        this.UsersGroupsLKs = new HashSet<UsersGroupsLK>();
    }

    public int GroupNumber { get; set; }
    public string GroupName { get; set; }
    public int GroupRank { get; set; }
    public bool ActiveFlag { get; set; }
    public System.DateTime DateAdded { get; set; }
    public string AddedBy { get; set; }
    public System.DateTime LastUpdated { get; set; }
    public string LastUpdatedBy { get; set; }
    // Application - Lazy Loading population
    public int ApplicationID { get; set; }
    // UsersGroupsLK - Lazy Loading population
    public int UserNumber { get; set; }
    public string UserID { get; set; }

    public virtual ICollection<ApplicationsGroupsLK> ApplicationsGroupsLKs { get; set; }
    public virtual ICollection<GroupApplicationConfigurationsLK> GroupApplicationConfigurationsLKs { get; set; }
    public virtual ICollection<UsersGroupsLK> UsersGroupsLKs { get; set; }

    public GroupModel()
    {}
    public GroupModel(GroupModel group)
     {
        GroupNumber = group.GroupNumber;
        GroupName = group.GroupName;
        ActiveFlag = group.ActiveFlag;
        DateAdded = group.DateAdded;
        AddedBy = group.AddedBy;
        LastUpdated = group.LastUpdated;
        LastUpdatedBy = group.LastUpdatedBy;
        UserNumber = group.UsersGroupsLKs.
     }


 // Neat Linq trick to convert database query results directly to Model
 public static IList<GroupModel> FlattenToThis(IList<GroupModel> groups)
 {
    return groups.Select(group => new GroupModel(group)).ToList();
 }
}

}

7番目の投稿 - これは、以前に投稿したエラーについて問題が発生したモデルです。トレイ、あなたが助けてくれるなら、私は本当にそれを感謝します....私はこの部分を働かせることができない限り、私は「水の中で死んでいる」.

namespace CMSEFModel
{
    using System;
    using System.Collections.Generic;

    public partial class Group
    {
        public Group()
        {
            this.ApplicationsGroupsLKs = new HashSet<ApplicationsGroupsLK>();
            this.GroupApplicationConfigurationsLKs = new HashSet<GroupApplicationConfigurationsLK>();
            this.UsersGroupsLKs = new HashSet<UsersGroupsLK>();
        }

        public int GroupNumber { get; set; }
        public string GroupName { get; set; }
        public int GroupRank { get; set; }
        public bool ActiveFlag { get; set; }
        public System.DateTime DateAdded { get; set; }
        public string AddedBy { get; set; }
        public System.DateTime LastUpdated { get; set; }
        public string LastUpdatedBy { get; set; }
        // Application - Lazy Loading population
        public int ApplicationID { get; set; }
        // UsersGroupsLK - Lazy Loading population
        public int UserNumber { get; set; }
        public string UserID { get; set; }

        public virtual ICollection<ApplicationsGroupsLK> ApplicationsGroupsLKs { get; set; }
        public virtual ICollection<GroupApplicationConfigurationsLK> GroupApplicationConfigurationsLKs { get; set; }
        public virtual ICollection<UsersGroupsLK> UsersGroupsLKs { get; set; }

        public GroupModel(Group group)
         {
            GroupNumber = group.GroupNumber;
            GroupName = group.GroupName;
            ActiveFlag = group.ActiveFlag;
            DateAdded = group.DateAdded;
            AddedBy = group.AddedBy;
            LastUpdated = group.LastUpdated;
            LastUpdatedBy = group.LastUpdatedBy;
            UserNumber = group.UsersGroupsLKs.
         }

     // Neat Linq trick to convert database query results directly to Model
     public static IList<GroupModel> FlattenToThis(IList<Group> groups)
     {
        return groups.Select(group => new GroupModel(group)).ToList();
     }
    }

}

8 ポスト:

using (wmswebEntities DbContext = new wmswebEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
            DbContext.Configuration.LazyLoadingEnabled = true;
                    DbContext.Database.Connection.Open();

                    List<Groups> myGroups = new List<Groups>();

                     var myGroups = from p in DbContext.Groups
                                where p.ActiveFlag = true
                                select new
                                {
                                    p.Groups.ApplicationName,
                                    p.Groups.GroupName,
                                    p.Groups.GroupRank,
                                    p.Groups.ActiveFlag,
                                    p.Groups.DateAdded,
                                    p.Groups.AddedBy,
                                    p.Groups.LastUpdated,
                                    p.Groups.LastUpdatedBy,
                                    p.Groups.ApplicationsGroupsLK.ApplicationID,
                                    p.Groups.UsersGroupsLK.UserNumber
                                };

                    return myGroups;
                }
4

1 に答える 1

1

これには、ちょっとした工夫が必要です。グリッドはフラット モデルのみを受け入れます。この種の質問はよく聞かれます。最初の回答は次のとおりです: Kendo UI Grid - How to Bind to Child Properties

それでも問題が解決しない場合は、ここにコードを投稿してください。一緒に作業できます。

于 2013-02-14T01:58:16.257 に答える