我正在使用Umbraco 7运行一个论坛,我希望由他来更新特定成员的财产。
这就是我的尝试:
var authorId = Model.Content.GetPropertyValue<int>("postAuthor", 0);
var author = Members.GetById(authorId);
umbraco.cms.businesslogic.member.Member member = umbraco.cms.businesslogic.member.Member.GetMemberFromEmail(author.GetPropertyValue("email").ToString());
member.getProperty("postCounter").Value = Convert.ToInt32(member.getProperty("postCounter")) + 1;
member.Save();
但是这不起作用,下面的行引发了这个错误:
umbraco.cms.businesslogic.member.Member member = umbraco.cms.businesslogic.member.Member.GetMemberFromEmail(author.GetPropertyValue("email").ToString());
它说:警告:umbraco.cms.businesslogic.member.Member已过时:&#34;使用MemberService和Umbraco.Core.Models.Member模型而不是&#34;
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
var memberService = ApplicationContext.Current.Services.MemberService
var member = memberService.GetById(authorId)
member.SetValue("postCounter", newValue);
memberService.Save(member);
永远不要这样做!!
每次保存一段内容时,你需要存储这样的计数,这些计数经常在你自己的单独表中更新(是的,成员对象基本上也是一段内容)你将保存一个新版本在版本表中。您的所有自定义属性也将使用新版本再次保存。这也是一个相当数据库密集的操作,这是完全没必要的,只需要一个包含两列的表:memberId和count,你完成了它,它们都非常精益和高效。
答案 1 :(得分:1)
如果您使用的是razor脚本,则需要执行以下操作:
var authorId = Model.Content.GetPropertyValue<int>("postAuthor", 0);
var ms = ApplicationContext.Current.Services.MemberService;
var member = ms.GetById(authorId);
member.SetValue("postCounter",member.GetValue("postCounter"));
但正如塞巴斯蒂安所说,你可能希望以不同的方式表现