想知道一些经验丰富的人(或者比我更有想法的人)如何处理我的建模场景...
我有一个典型的“类别 ->子类别 ->第三级子类别”场景,我不确定我是否正在正确地映射它。我将其直接映射到MVC路由,因为Raven似乎很适合这样做。在最终类别下(可以是第一、第二或第三级),将有与该类别级别相关联的项目列表。因此,我们可能会有像这样的内容:
单层类别:'/政治/'
第二层类别:'政治/人物'或'政治/网站'
三级类别:'体育/职业/排球'或'体育/大学/足球'
在传统的关系型数据库管理系统中,通过主键/外键+几个连接很容易实现... 所以,想知道我应该如何使用Raven处理?
根据我所了解的,我应该将整个“sports/pro/volleyball” URI或键存储在其中的项目列表中吗?
例如 -
public class CategoryItem
{
public string FriendlyName {get;set;} // Volleyball or Pro Volleyball
public string CategoryURI {get;set;} // i.e. - "/sports/pro/volleyball/"
public string content {get;set;} // i.e. - "Who is the best Pro Volleyball Athlete?"
public List<string> Comments {get;set;}
}
// then we could store something like this:
var survey1 = new CategoryItem();
survey1.CategoryURI = "/sports/pro/volleyball/"
survey1.Content = "Who is the best female pro volleyball player?";
survey1.Comments.Add(new Comment("Misty May"));
var survey2 = new CategoryItem();
survey2.CategoryURI = "/sports/pro/volleyball/";
survey2.Content = "Who is the best male pro volleyball player?";
survey2.Comments.Add(new Comment("Some guy I don't kow");
// asuumes ravenSession was alreadyopened...
ravenSession.Store(survey1);
ravenSession.Store(survey2);
ravenSessoin.SaveChanges();
//{ ...... etc ..... }
//Then I can query by CategoryURI without needing joins (denormalization).... i.e. -
var items = session.Query<CategoryItem>()
.Where(x => x.CategoryURI == "/sports/pro/volleyball/");
或者我应该为实际类别创建一个列表项成员?每个项目都有自己的评论列表...这意味着所有内容都存储在Raven中的单个文档中,即-
public class Category
{
public string FriendlyName {get;set;} // i.e. - "Volleyball" or "Pro Volleyball"
public string URI {get;set;} // i.e. - "/sports/pro/volleyball" which is the MVC path
public List<CategoryItem> Items {get;set;}
}
public class CategoryItem
{
public string Content {get;set;}
public List<string> Comments {get;set;}
}
var vballCat = new Category();
vballCat.FriendlyName = "Pro Volleyball";
vballCat.URI = "/sports/pro/volleyball/"; // equivalent to the MVC route
var catItem = new CategoryItem().
catItem.Content = "Who is the best male pro volleyball player?";
catItem.Comments.Add("Misty May");
catItem.Comments.Add("Some Guy 1");
vballCat.Items.Add(catItem);
ravenSession.Store(vballCat);
ravenSession.SaveChanges();
现在,一旦我提取主要类别,即"/sports/pro/volleyball/",我已经拥有了它下面的所有内容。
var items = session.Query<Category>()
.Where(x => x.URI == "/sports/pro/volleyball/");
现在,我可以通过迭代项集合及其评论集合来完成操作。这是否使用了急切加载?如果在一个分类项目下有一百万条评论,那么当我加载主分类时,它会同时加载所有一百万条评论吗?
如果您能提供任何帮助,我将不胜感激。如果这个示例/问题不清楚的话,请原谅……如果您需要,我会尽力澄清的。再次感谢!