我们正在修改stackoverflow上的帖子。
我们只更改了标记部分,删除了tag1
,tag2
并添加了tag3
,tag4
。
按下发布问题按钮后,应该完成以下操作:
count
的{{1}}列,tag1
减少了1 tag2
,tag1
tag2
,tag3
已存在,请将两个tag4
列增加1;否则,将count
表格中的tags
表格添加count
价值1 tag3
,tag4
让我们深呼吸,这就是全部!
我想看看哪个ORM可以最容易地处理这个问题,无论它是用PHP / Java / C / .Net还是其他任何语言编写的,因为各种语言的想法是相似的!
答案 0 :(得分:0)
在DataObjects.Net中,它看起来像这样。现在有任何映射文件,因为ORM会自动生成数据库模式,包括问号标签关系的辅助表。
标记类:
[HierachyRoot]
public class Tag : Entity
{
[Field, Key]
public int Id { get; private set; }
[Field(Length = 100, Indexed = true)]
public string Name { get; private set; }
[Field]
public int QuestionsCount { get; set; }
public Tag(string name)
{
Name = name;
}
}
问题类:
[HierachyRoot]
public class Question : Entity
{
[Field, Key]
public int Id { get; private set; }
[Field]
public EntitySet<Tag> Tags { get; private set; }
// Business methods (can be placed in separate service class)
public void AddTag(string name)
{
var tag = Query.All<Tag>().SingleOrDefault(t => t.Name == name);
if (tag==null)
tag = new Tag(name) { QuestionsCount = 1 }
else
tag.QuestionsCount++;
Tags.Add(tag);
}
public void RemoveTag(string name)
{
var tag = Query.All<Tag>.Single(t => t.Name == name);
tag.QuestionsCount--;
Tags.Remove(tag);
}
}
申请代码:
using (Session.Open())
using (var transactionScope = Transaction.Open())
{
var question = Query.Single<Question>(questionId);
question.RemoveTag("tag1");
question.RemoveTag("tag2");
question.AddTag("tag3");
question.AddTag("tag4");
transactionScope.Complete();
}