2013-08-01 6 views

ответ

2

Проект генератора сопоставления NHibernate (http://nmg.codeplex.com/) может создавать как классы сущностей, так и все формы сопоставлений (XML, свободно nhibernate и т. Д.).

0

Электроинструменты Entity Framework могут генерировать POCO для вас, из базы данных. См. this article для получения дополнительной информации. Возможно, вам потребуется немного изменить процесс; немного тонкой настройки может производить очень хорошие результаты:

Если все линии вверх, то мы не создают никакого отображения на все:

EFPT

Конечно, если все не вы получите атрибуты, специфичные для Entity Framework, которые необходимо удалить. Но у вас все еще будет хорошая отправная точка.

Оповещение о личном присутствии! Другая возможность - просто сохранить атрибуты и использовать Entity Framework. Я бы рекомендовал его, если вы сильно используете LINQ. Я считаю, что поставщик LINQ NHibernate работает по большей части, но бомбит с 1) чрезвычайно тривиальными выражениями LINQ и 2) чрезвычайно сложными выражениями LINQ. Но ta.speot.is! Все становится все лучше! Каждый из них по своему усмотрению, но прямо сейчас поставщик LINQ Entity Framework чрезвычайно последователен.

0

Вот быстрый SQL-скрипт для создания как poco, так и карты. Не стесняйтесь при необходимости настраивать.

begin 

    declare @tablename varchar(200) 
    set @tablename = 'tablename' 

    declare @outputTable table (id int identity(1,1), rowType varchar(4), outputString varchar(5000)) 
    declare @columnname varchar(200) 
    declare @isNullable bit 
    declare @xtype tinyint 
    declare @xtypeString varchar(200) 
    declare @outputString varchar(5000) 

    declare c1 cursor for 
     select name, isnullable, xtype from syscolumns 
      where id in (select id from sysobjects where name = @tablename) 
      order by colorder 

    open c1 

    set @outputString = 'Table("' + Upper(@tablename) + '");' 

    insert into @outputTable (rowType, outputString) values('map',@outputString) 

    fetch next from c1 into @columnName, @isNullable, @xtype 
    while(@@FETCH_STATUS=0) 
    begin 

    print @columnname 
    print @isnullable 
    print @xtype 

    set @outputString = '' 
    set @xtypeString = '' 

    if (@xtype = 104) 
     set @xtypeString = 'bool' 

    if (@xtype = 60) 
     set @xtypeString = 'double' 

    if (@xtype = 62) 
     set @xtypeString = 'double' 

    if (@xtype = 175) 
     set @xtypeString = 'string' 

    if (@xtype = 56) 
     set @xtypeString = 'int' 

    if (@xtype = 48) 
     set @xtypeString = 'int' 

    if (@xtype = 167) 
     set @xtypeString = 'string' 

    if (@xtype = 61) 
     set @xtypeString = 'DateTime' 

    if (@isnullable = 1 and len(@xtypeString) > 0 and @xtypeString <> 'string') 
     set @xtypeString = @xtypeString + '?' 

    if @xtypeString='' 
     set @xtypeString = cast(@xtype as varchar) 

    set @outputString = 'public virtual ' + @xtypeString + ' ' + @columnName + ' {get;set;}   // ' + @columnname 

    insert into @outputTable (rowType, outputString) values('poco', @outputString) 

    set @outputString = 'Map(x => x.'+ @columnname+').Column("' + @columnname+'");' 

    insert into @outputTable (rowType, outputString) values('map', @outputString) 


    fetch next from c1 into @columnName, @isNullable, @xtype 
    end 

    close c1 
    deallocate c1 

    select * from @outputTable where rowType = 'poco' order by id 
    select * from @outputTable where rowType = 'map' order by id 
end 
Смежные вопросы