2010-05-31 4 views
14

В Delphi 2010 есть новые функции, касающиеся RTTI, которые я прочитал, это упростит инструменты ORM и значительно более чистый код.Есть ли какой-нибудь новый ORM для Delphi 2010?

но я не нашел никаких ORM, включенных в эти функции.

Как вы думаете, Embarcadero должен построен один и включить его с Delphi

+0

Я думаю, что в настоящее время не стоит для поставщика исключительно целевого D2010 –

+0

@Marco: Delphi 2010 представил расширенную RTTI, который требуется для сериализации/десериализации всех полей объектов (включая частные и защищенные) и атрибутов, которые являются очень мощным способом добавления метаданных к определениям классов. – mjn

+0

Я голосую, чтобы закрыть этот вопрос как вне темы, потому что это открытое мнение вопрос. –

ответ

1

Что именно функции вы говорите?

Есть несколько ORMs для Delphi: ORM for DELPHI win32

+1

Ни один из них не является эксклюзивным для RTTI Delphi 2010. –

+0

Зачем вам нужны * эксклюзивные * ORM? –

+1

Как бы выглядел ORM, который поддерживает Delphi 2 до 2010? Он будет использовать наименьший общий знаменатель доступных функций языка. Поэтому лучше поддерживать только 2010+ и использовать расширенные RTTI и атрибуты в ORM API, например ORM для .Net и платформы Java. – mjn

8

Spring Framework, (который использует Delphi 2010 расширенной RTTI) имеет Entity Framework на своей дорожной карте:

http://code.google.com/p/delphi-spring-framework/

Delphi Spring Framework является международный проект с открытым исходным кодом, , целью которого является обеспечение надежной инфраструктуры инфраструктуры , которая будет помогают разработчикам Delphi построить твердотельные, гибкие и расширяемые предприятия приложения и библиотеки классов на основе на Embarcadero® Delphi® 2010 для Платформа Win32.

+0

выглядит многообещающим – DelphiDev

8

Еще один выпущенный Delphi 2010+ ORM - DORM. Он использует новые функции RTTI и способен сохранять любой простой объект Delphi.

Возьмите, возможно, взглянуть на клиент-сервер ОРМ как mORMot - который прекрасно работает с Delphi 2010 - в Клиент-сервер размер стоит упомянуть в мире SOA.

+0

См. Http://blog.synopse.info/post/2012/07/12/One-ORM-to-rule-them-all для некоторых моментов относительно mORMot относительно других существующих ORM. –

3

TMS Aurelius использует новые возможности RTTI, представленные в последней версии Delphi. Он также использует generics, перегрузку оператора и другие новые функции Delphi, которые делают его совместимым только с Delphi 2010 и выше.

4

DORM, Delphi ORM - это новая структура ORM OpenSource для Delphi, используемая в DelphiXE + (она также должна работать на D2010, но не тестируется на этой версии). Он поддерживает (и использует) все новые функции RTTI. Позволяет сопоставлять файлы, атрибуты и сопоставление с общей конфигурацией. На ней основаны большие производственные системы. Он будет интегрирован в Delphi Spring Framework со следующего основного выпуска. Он разработан небольшим международным сообществом (6 человек). http://code.google.com/p/delphi-orm/

Чтобы показать некоторые основные функции, на самом деле это используется unittest.

procedure TTestDORM.TestCRUD; 
var 
    p1: TPerson; 
    p1asstring: string; 
    id: integer; 
begin 
    p1 := TPerson.NewPerson; 
    try 
    Session.Save(p1); 
    p1asstring := p1.ToString; 
    id := p1.id; 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    CheckEquals(p1asstring, p1.ToString); 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    p1.FirstName := 'Scott'; 
    p1.LastName := 'Summer'; 
    p1.Age := 45; 
    p1.BornDate := EncodeDate(1965, 1, 1); 
    Session.Update(p1); 
    p1asstring := p1.ToString; 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    CheckEquals(p1asstring, p1.ToString); 
    Session.Delete(p1); 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    CheckNull(p1); 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 
end; 

P.S.Я главный и основной автор DORM

+0

Также стоит сказать, что в коде google также есть несколько вилок DORM (особенно Роберт Лав). – menjaraz

+0

@ Daniele Я процитировал DORM в своем ответе несколько месяцев назад. :) –

Смежные вопросы