遍历XML数据并保存至数据库失败问题排查求助
问题分析与解决方案
你遇到的问题根源很明确:你已经成功从XML里把数据读取到了xlist集合中,但在保存到数据库时,完全没有使用这个集合里的数据,而是新建了一个空的ListingsModel对象来赋值,自然数据库里不会有实际数据存入。
另外还要注意:你的ListingsModel类里并没有定义Community属性,但代码里却尝试给tbllisting.communityName赋值mymodel.Community,这会导致编译错误或者空值,得先修正这个属性问题(要么在ListingsModel里添加Community属性,要么调整赋值逻辑)。
修正后的Controller代码
List<ListingsModel> xlist = new List<ListingsModel>(); XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("~/xml/listing.xml")); foreach (XmlNode node in doc.SelectNodes("/Listings/Listing")) { // 这里确保读取到正确的属性,比如如果XML里有Community节点,要加上 xlist.Add(new ListingsModel { Ad_Type = node["Type_Type"].InnerText, Unit_Type = node["Unit_Type"].InnerText, Community = node["Community"]?.InnerText // 用?.避免节点不存在时的空引用异常 }); } AppTestDBConn db = new AppTestDBConn(); // 遍历xlist里的每一条XML数据,逐个转换为数据库实体并添加 foreach (var item in xlist) { listing tbllisting = new listing(); tbllisting.listtype = item.Ad_Type; tbllisting.communityName = item.Community; // 现在用的是XML里读取到的真实数据 // 如果需要保存Unit_Type,也可以对应赋值 // tbllisting.unitType = item.Unit_Type; db.listings.Add(tbllisting); } // 统一保存所有变更到数据库 db.SaveChanges();
关键修正点
- 新增了对
xlist集合的遍历,把每个从XML读取到的ListingsModel对象,转换成数据库的listing实体 - 修正了
Community属性的赋值逻辑(需要确保XML里有对应的节点,并且ListingsModel里定义了该属性) - 将
SaveChanges()放在遍历之后,只调用一次,提升批量操作的性能(当然每次添加后调用也可以,但批量添加后统一保存更高效)
额外检查项
- 确认XML节点名称是否和代码里的
node["Type_Type"]、node["Unit_Type"]完全一致(XML节点区分大小写) - 确认
listing实体的属性名称和类型,是否和ListingsModel的属性匹配,避免类型不兼容的问题 - 检查数据库上下文
AppTestDBConn的配置是否正确,确保连接字符串指向正确的数据库
内容的提问来源于stack exchange,提问作者SKS
相关产品推荐
相关产品推荐

