Orm 奥默斯,你将如何用奥默斯的方式处理这个问题?
我们正在修改关于stackoverflow的帖子 我们只更改了标记部分,删除了Orm 奥默斯,你将如何用奥默斯的方式处理这个问题?,orm,relationship,Orm,Relationship,我们正在修改关于stackoverflow的帖子 我们只更改了标记部分,删除了tag1,tag2,并添加了tag3,tag4 按下“发布您的问题”按钮后,应执行以下操作: 将tag1,tag2的count列减少1 删除post与tag1,tag2 如果tag3,tag4已经存在,则将这两个变量的count列增加1;否则,使用count值1将它们插入到标记表中 添加post与tag3,tag4 让我们深呼吸,就这样 我想看看哪种ORM最容易/性能最好,无论它是用PHP/Java/C/.Net还是其
tag1
,tag2
,并添加了tag3
,tag4
按下“发布您的问题”按钮后,应执行以下操作:
tag1
,tag2
的count
列减少1tag1
,tag2
tag3
,tag4
已经存在,则将这两个变量的count
列增加1;否则,使用count
值1将它们插入到标记
表中tag3
,tag4
[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);
}
}
[HierachyRoot]
公共类问题:实体
{
[字段,键]
public int Id{get;private set;}
[现场]
公共EntitySet标记{get;private set;}
//业务方法(可以放在单独的服务类中)
public void AddTag(字符串名称)
{
var tag=Query.All().SingleOrDefault(t=>t.Name==Name);
if(标记==null)
标记=新标记(名称){QuestionsCount=1}
其他的
tag.questionScont++;
标签。添加(标签);
}
public void RemoveTag(字符串名称)
{
var tag=Query.All.Single(t=>t.Name==Name);
tag.questionscont--;
标签。移除(标签);
}
}
申请代码:
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();
}
使用(Session.Open())
使用(var transactionScope=Transaction.Open())
{
var question=Query.Single(questionId);
问题:移除标记(“tag1”);
问题:移除标记(“tag2”);
问题。添加标签(“tag3”);
问题。添加标签(“tag4”);
transactionScope.Complete();
}
我们到底想比较什么?商业模式声明?现实生活中寻找的业务方法或手动分配的属性并调用Persist()方法?因此它将使用比纯(非ORM)过程编程多得多的查询?请参阅本文,了解我所说的非ORM解决方案,它只需要两个查询,无论有多少个标记: