2010-03-02 5 views
0

이 질문은 내 문제와 관련이 있기 때문에 죄송합니다.어떤 SQL ORM을 사용하여이 오래된 코드를 대체 할 수 있습니까?

반사를 학습하는 동안 일주일에 미니 SQL ORM을 수행 한 후 다른 주 동안 사소한 조작을했습니다. 아주 작은 작업이 있기 때문에 sqlite와의 호환성 만이 중요합니다. 지금까지 코드에 문제가 없었지만 TSQL 또는 MySql을 지원하는 무언가로 이식하려고합니다.

The example code is here 구식이지만 내 수업에서 가장 많이 사용되는 기능이 있습니다. 어떤 라이브러리를 통째로 그 코드를 통증의 가장 작은 부분으로 옮길 수 있습니다. 외래 키를 지원해야합니다.

+0

또한보십시오 : http://stackoverflow.com/questions/2163456/is-there-anything-wrong-with-this-orm-closed –

답변

2

밖으로.

필자는 Lightspeed 2를 사용했으나 새로 출시 된 버전 3은 사용하지 않았습니다. 따라서 Lightspeed 3도 좋은 선택입니다. Lightspeed 프로젝트에서 nHibernate를 포함하여 6 ~ 7 개의 다른 ORM을 살펴 보았습니다. Lightspeed가 두 번째로 빠릅니다. 가장 빠른 ORM은 정말 펑키 한 모델을 생성했습니다!

언급 된 ORM 중 하나와 언급되지 않은 것 중 하나가 모두 작업을 수행합니다.나는 당신이 당신의 목표물을 모델링하기 위해 얼마나 많은 노력을 기울이고 싶은지, 그리고 당신의 개인적 취향이 무엇인지에 관해서 생각할 것입니다.

나는 T4 템플릿에 3 개의 변수를 설정하고 폴더에 넣기 만하면되기 때문에 SubSonic을 선호합니다. 모든 코드가 자동으로 생성됩니다. 또한 필요한 경우 템플릿을 원하는대로 트위크 할 수 있습니다.

+0

나를 위해 뭔가를 정리할 수 있습니다 SubSonic 그것을 보았던 마지막 시간에 외래 키가없는 것으로 간주하고 태그 안에 태그가있는 미디어 요소를 삽입하면 db에 삽입되지 않습니다 (이 ID는이 case 0은 아직 존재하지 않기 때문에). 아직도 그렇습니까? –

+0

예, 자식 레코드를 저장하는 데는 약간의 작업이 필요합니다. 이 링크는 http://www.frozenmountain.com/blog/post/Automatic-Foreign-Objects-in-SubSonic3-SimpleRepository.aspx에 도움이 될 수 있습니다. – 37Stars

+0

아, 물론 원주민이 선호합니다. 내 <1week 프로토 타입 코드는이 지원과 훌륭한 점을 제외하고는 훌륭합니다. 나는 Lightspeed 3을 지원한다면 그것으로 갈 것이라고 생각한다. 나는 그 사이트를 보면서 말할 수 없다. 나는이 질문이 만료 될 때 내일 더 많은 시간을 보낼 것이다. –

10

내 제안은 몇 가지 ORM의 자습서를 확인한 다음 가장 적합한 방식으로 실행하는 것입니다.

NHibernate reference documentation은 소개 장의 예제를 실행하기 위해 30 분을 제안합니다.

내 자신의 ORM 짧은 목록은 다음과 같습니다

  • NHibernate에
  • Linq는이 SQL

일부 관련 질문 :

NHibernate에 예

// create and save an entity 
var u = new User{ Name="foo", SignupDate=DateTime.Now }; 
session.Save(u); 

// fetch and update entity, saving a related entity 
var post = session.Get<Post>(42); 
post.Tags["foo"].Count++; 
session.Save(post); 

// save a related item for an entity 
post.Tags.Add(new Tag("Name")); 
session.Save(post); 

몇 가지 예를 매핑 및 클래스 :

public class User 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual DateTime SignupDate { get; set; } 
} 

public class Post 
{ 
    public virtual int Id { get; set; } 
    public virtual User User { get; set; } 
    public virtual string Title { get; set; } 
    public virtual string Body { get; set; } 
    public virtual IList<Tag> Tags { get; set; } 
} 

public class Tag 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Count { get; set; } 
} 

<class name="User" table="user"> 
    <id name="Id"> 
    <generator class="native" /> 
    </id> 
    <property name="Name" /> 
    <property name="SignupDate" /> 
</class> 

<class name="Post" table="post"> 
    <id name="Id"> 
    <generator class="native" /> 
    </id> 
    <property name="Title" /> 
    <property name="Body" type="StringCLob" /> <!-- ntext --> 
    <many-to-one name="User" /> 
    <bag name="Tags" table="post_tag" cascade="save-update"> 
     <key column="postid" /> 
     <many-to-many class="Tag" column="tagid" /> 
    </bag> 
</class> 

<class name="Tag" table="tag"> 
    <id name="Id"> 
    <generator class="native" /> 
    </id> 
    <property name="Name" /> 
    <property name="Count" /> 
</class> 
+0

+1하지만 IIRC는 귀하의 짧은 목록에 모두 시간이 걸립니다 일어나서 달리기? 그리고 나는 대부분 ORM으로 일반 간단한 클래스를 작성하고 그것을 삽입 할 수 있다고 걱정한다. –

+0

첫 번째 예제가 작동하려면 맵핑이 필요합니까? –

+0

예. 매핑은 클래스 라이브러리에 포함 된 리소스 여야합니다. –

1

Mindscape Lightspeed가 NHibernate에와 EntityFra에서 일반적인 물건의 대부분을 가지고 mework 및 POCO

에서 작업 할 수는

마이크로 소프트도 그 중 하나가 작업하는 디자이너의 고용 SQL 서버, MySQL과 다른

샘플, 튜토리얼의 많은, 빠른 친절, 개인의 도움을 많이 지원 EntityFramework

시도 후 내가 음속을 향한 린으로, Linq는 2 SQL 또는 음속을 사용하여 볼 것 같은 간단한 데이터 모델에 대한

+0

POCO는 참조/외래 키를 지원하고 자식 데이터를 삽입합니까 (json 형식의 예제 데이터 : bill {productid, tranaction_data {date, location}, customer}) –

+0

Lightspeed 2.0 및 3.0 *은 POCO를 지원하지 않습니다. .... 프레임 워크는 자신의 제한을 부과하는 자신의 엔터티 * 기본 클래스에서 상속 받도록 요구합니다. 최소한 그 중 하나는 Id라는 읽기 전용 기본 키입니다. – Mark

관련 문제