Автокартопостроитель может отобразить сложный исходный график на плоское место назначения без префиксов в целевых свойствах и без пользовательских отображений?

Есть ли способ заставить Автокартопостроитель отображать сложный исходный график как:

public class Source {
    public string Name { get; set; }
    public SourceSub Sub { get; set; }
}

public class SourceSub {
    public string ValA { get; set; }
    public string ValB { get; set; }
}

плоскому месту назначения, которое похоже:

public class Dest {
    public string Name { get; set; }
    public string ValA { get; set; }
    public string ValB { get; set; }
}

Я знаю, что что-то вроде этого будет работать на место назначения:

public class Dest {
    public string Name { get; set; }
    public string SubValA { get; set; }
    public string SubValB { get; set; }
}

Однако я ищу способ отобразиться на место назначения, не требуя префикса в целевых свойствах (для дочернего класса в источнике) как долго, поскольку имена в свойствах дочернего класса источника соответствуют целевым именам свойства. Существует ли способ сказать Автокартопостроитель свойствам проекта в дочернем классе источника к плоскому целевому классу, не отображая каждого отдельного участника?

8
задан Matt Spradley 15 February 2010 в 05:17
поделиться

1 ответ

Вы можете использовать keep-lines , чтобы получить то, что вы хотите, скопировать их, а затем отменить. Напротив, есть также линии очистки , чтобы избавиться от линий, которые вы не хотите.

-121--2366117-

Не определяйте сопоставление столбцов, которые требуется загрузить по запросу. Затем настройте параметры, описанные в разделе Отложенная загрузка столбцов , с помощью объекта mapper . Измененный код:

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class SomeClass(Base):
    __tablename__ = 'some_table'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    #big_name = Column(String(500))

SomeClass.__table__.append_column(Column('big_name', String(500)))
SomeClass.__mapper__.add_property('big_name', deferred(SomeClass.__table__.c.big_name))

Выполнение этого тестового кода:

c = session.query(SomeClass).first()
# here SQL is loading all configured properties, but big_name
print "c: ", c
# only here another SQL request is made to load the property
print "big_name: ", c.big_name

приводит к извлечению журнала:

... INFO sqlalchemy.engine.base.Engine.0x...77d0 SELECT some_table.id AS some_table_id, some_table.name AS some_table_name 
FROM some_table 
LIMIT 1 OFFSET 0

... INFO sqlalchemy.engine.base.Engine.0x...77d0 SELECT some_table.big_name AS some_table_big_name 
FROM some_table 
WHERE some_table.id = ?
-121--4213388-

Нет, сейчас это не поддерживаемый сценарий. Мы смотрели на это некоторое время, но обнаружили, что частота коллизий имен слишком высока для наших приложений, и наличие сглаженного имени сохранило полный контекст для того, откуда это значение.

1
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: