2010-03-10 6 views
1

우리는 stackoverflow에 대한 게시물을 수정하고 있습니다.ORMers, 어떻게 이것을 ORM 스타일로 처리 할 예정입니까?

그리고 우리는 단지 태그를 부분 변경은 tag2tag1 제거하고 tag3, tag4을 추가했다.

게시 질문하기 버튼을 누른 후, 이러한 일들이 수행해야합니다 :

  1. tag1count 열을 감소 tag2
  2. 1 포스트와 tag1 사이의 관계를 삭제 tag2
  3. tag3, tag4이 이미있는 경우 count 열을 1 씩 늘리거나 그렇지 않으면count 값 1
  4. 포스트와 tag3 사이의 관계를 추가로테이블, tag4

의이 심호흡을하고 모든하자!

PHP/Java/C/.Net 또는 다른 언어로 작성된 관계없이 어느 ORM이 가장 쉽게 접근 할 수 있는지보고 싶습니다. 언어마다 유사하기 때문에!

+0

? 비즈니스 모델 선언? 실생활의 비즈니스 메소드 또는 수동으로 할당 된 속성을 찾고 Persist() 메소드를 호출합니까? –

답변

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(); 
} 
+0

순수 (non-ORM) 절차 프로그래밍보다 훨씬 많은 쿼리를 사용합니까? – user198729

+0

비 ORM 솔루션을 의미하는이 게시물을 참조하십시오. 그러나 많은 태그에 대해 두 개의 쿼리 만 필요합니다. http : //stackoverflow.com/questions/2392827/how-to-deal-with-m2m-relationshipposts-and- tags-by-doctrinein-symfony – user198729

관련 문제