表示SQL Server数据库中的路径(ASP.净MVC)

本文关键字:ASP MVC 路径 SQL Server 数据库 表示 | 更新日期: 2023-09-27 18:06:10

我正在用ASP编写一个小书签工具。每个书签都存储在一个文件夹中。我目前通过简单地将路径作为字符串存储在数据库中来表示这一点,但是当涉及到开始按文件夹和列表文件夹显示项目时,这似乎是一种有效的方法。

是否有任何内置的方式来表示,然后在数据库中操作路径?还是公认的最佳实践?

表示SQL Server数据库中的路径(ASP.净MVC)

如果您谈论的是像文件系统路径那样的路径,那么您可能需要开始考虑树和分层系统。

本质上,您将有一个名为Category或其他形式的额外表,它使用ParentId进行自引用。这样,您就可以根据查询的方向迭代您的类别,直到没有父项或子项,并使用查询的结果构建路径。如果你的书签有不止一个分类,这当然会很难看。您将需要在其中进行一些额外的验证。

下面的代码实际上是来自于网上的一篇文章,这是我自己用的,但是我找不到这篇文章,引用它作为来源。

public class Category
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
    public virtual Category Parent { get; set; }
    public virtual ICollection<Category> Children { get; set; }
}
public class CategoryMapping : EntityTypeConfiguration<Category> 
{
    public CategoryMapping() 
    {
        HasKey(x => x.CategoryId);
        Property(x => x.CategoryId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(x => x.Name)
            .IsRequired()
            .HasMaxLength(255);
        //Parent is optional, because root node has no parent
        HasOptional(x => x.Parent)
            .WithMany(x => x.Children)
            .HasForeignKey(x => x.ParentId)
            .WillCascadeOnDelete(false);
    }
}

引用:

  • http://sqllessons.com/categories.html
  • http://www.sitepoint.com/hierarchical-data-database/
  • 实体框架代码第一自引用父/子与有效载荷