Umbraco:更新特定成员的财产

时间:2015-06-03 06:20:03

标签: umbraco umbraco7

我正在使用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;

有人可以帮我解决这个问题吗?

2 个答案:

答案 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"));

但正如塞巴斯蒂安所说,你可能希望以不同的方式表现