【发布时间】:2018-06-13 20:57:14
【问题描述】:
所以我一直在用头撞墙一段时间。我试图做的是遵循定义为“类别>子类别>子类别的子项......”的类别跟踪,但由于某种原因,我显然无法掌握,应该有父母的类别有时会失败设置他们的 ParentId,但并非一直如此!?
string catString = "Category1Name>Category2Name>Category3Name";
if (!string.IsNullOrEmpty(catString)) {
string[] catStrings = catString.Split('>');
ProductCategory[] categories = new ProductCategory[catStrings.Length];
for (int j = 0; j < catStrings.Length; j++) {
string categoryName = catStrings[j];
ProductCategory parent = j > 0 ? categories[j - 1] : null;
if (j > 0) {
categories[j] = _context.ProductCategories.SingleOrDefault(x => x.Name.ToUpper().Replace(" ", "") == categoryName.ToUpper().Replace(" ", "") && x.ParentId == parent.Id);
} else {
categories[j] = _context.ProductCategories.SingleOrDefault(x => x.Name.ToUpper().Replace(" ", "") == categoryName.ToUpper().Replace(" ", ""));
}
if (categories[j] == null) {
if (j > 0) {
categories[j] = new ProductCategory { Name = categoryName, ParentId = parent.Id };
if (parent.Children == null) {
parent.Children = new List<ProductCategory>();
}
parent.Children.Add(categories[j]);
} else {
categories[j] = new ProductCategory { Name = categoryName };
}
_context.ProductCategories.Add(categories[j]);
categoriesCreated++;
}
}
product.Category = categories.Last();
}
类别是这样定义的
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
public virtual List<ProductCategory> Children { get; set; }
字符串示例
Glassware>Shot Glasses
Glassware>Wine Glasses
Glassware>Glass Carafes/Decanters/Jugs>Glass Carafes
Glassware>Glass Carafes/Decanters/Jugs>Glass Jugs
Tableware>Cutlery>Premium 18/10
【问题讨论】:
-
我会查看 System.Xml 命名空间或 System.Xml.Linq 命名空间,并了解如何使用它来创建作为 XmlDocument 或 XDocument 的树结构,然后您可以将其转换为字符串.此外,看起来您正在使用实体框架,您可以随时编写自己的 SQL 过程并让它以 XML 形式返回您的数据。
-
我正在尝试从字符串创建模型,而不是将模型转换为字符串。这样做的原因是我正在尝试从 csv 导入产品数据,我似乎遇到的问题是我搞砸了建立关系,但我看不到在哪里。对不起,糟糕的解释。
-
您在哪里保存对数据库的更改?父母的 ID 是在数据库中自动生成的,因为您只需调用
new ProductCategory { Name = categoryName };或者您在哪里设置 ID?您可能应该设置您的模型,以便自动设置 FK。 -
@JamesAnderson - 你能编辑你的问题在底部发布几行实际的字符串数据吗?
-
这包含在一个循环中,该循环遍历 csv 的每一行,因此一旦循环退出,更改就会保存。据我所知,我使用的是处理 Ids 的实体框架。它肯定已经设置了外键。我已经编辑了帖子以包含一些传入字符串数据的示例。
标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-5