【问题标题】:How to store hierarchy in Entity Framework如何在实体框架中存储层次结构
【发布时间】:2023-03-24 11:22:01
【问题描述】:

看看下面的 UI:

我允许拥有某种汽车商店的用户选择其商店提供的服务类型。我的层次结构有 5 个级别,总共有数千个条目。选择(检查)任何技能领域会自动选择所有子领域或子领域。每个区域都有一个 ID,顶层看起来像 10000,下一层看起来像 11000,等等......

我的问题:

  1. 如何使用一个支持移动设备、平板电脑和桌面界面的代码库来实现此 UI?
  2. 如何使用 Entity Framework 来表示层次结构以填充层次结构以及存储用户的选择?

应用程序在 ASP.Net MVC 4 中使用 SimpleMembership。

【问题讨论】:

    标签: c# asp.net asp.net-mvc user-interface hierarchy


    【解决方案1】:
    1. 让一个代码库支持多个平台的最佳方法是使用 ASP.NET MVC 4 WebAPI(JSON 或 XML)作为 REST Web 服务。你可以在这里找到更多信息:http://www.asp.net/web-api

    还有几个现成的解析器可以在客户端将 JSON/XML 数据反序列化为 C# 对象。

    第二个问题似乎与实体框架抽象背后的数据库架构更相关。就 EF 而言,组织数据的最佳方式可能是让类别引用其他类别,最后一个类别引用实际服务。您熟悉数据库关系、外键等概念吗?

    编辑:

        public class Category1{
        public string Name { get; set; }
    
        public virtual ICollection<Item> Items { get; set; }
    }
    
    public class Category2{
        public string Name { get; set; }
    
        public Category1 ParentCategory { get; set; }
    
        public virtual ICollection<Item> Items { get; set; }
    }
    
    public class Item{
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
    

    这是一个示例,您将如何编写代码优先的 EntityFramework 对象。 Category2 有一个 Category1 类型的父类,并且两个类别都包含一个项目集合。 Pluralsight 首先在 EF 代码上有一个 excellent course,它涵盖了所有基础知识。

    【讨论】:

    • 是的,但我希望 EF 有一种特殊的方式来以“代码优先”的方式组合这种分层数据结构,而无需显式定义表结构。
    • 恐怕无法避免编写某种数据结构定义。我将编辑回复,以便为您提供如何解决类别问题的示例。
    • 我正在考虑将用户的选择作为 XML 文件存储在文本 blob 列中。我相信 Azure 上的 SQL Server 支持在此类列的架构中进行搜索和过滤。不过,我以前从未这样做过。
    • 虽然您可以这样做,但它会使您的查询变得非常复杂。这样,您每次都必须解析 XML,尽管 SQL Azure(或任何 SQL 服务器)可以做到这一点,但我不推荐它。如果您坚持某种 od 序列化,为什么不使用 CSV?将所有用户选择存储在 CSV 中,例如:category1、category2、product 并在应用程序中解析它。
    猜你喜欢
    • 2013-04-16
    • 2016-03-11
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多