Изменить множественность отношений в Lightswitch для импортированных таблиц

У меня есть две таблицы на сервере SQL, одна Messages, а вторая Message Bodies. Между ними существует отношение FK (первичный ключ в Messages к столбцу (Message ID) в Message Bodies.

Message Bodies имеет уникальный индекс, указанный в Message ID, чтобы гарантировать отсутствие дубликатов.

Целью всей этой работы с базой данных является обеспечение отображения один-или-ноль-один.

          +-------------------------+           +------------------------------+
          |  Messages               |           | Message Bodies               |
          |-------------------------|           |------------------------------|
          | PK                      |+----+     | PK                           |
          | Message Header          |     +----+| Message ID                   |
          |                         |           | Message Body                 |
          +-------------------------+           +------------------------------+

Когда я добавляю это как источник данных в Lightswitch, между ними добавляется отношение «один ко многим».

Как мне изменить это, поскольку настройки кратности отключены?


person Robert MacLean    schedule 09.09.2011    source источник


Ответы (1)


Если вы моделируете свои данные SQL таким образом, LightSwitch распознает отношение 1 к 0..1:

CREATE TABLE [Messages]
(
    PK int IDENTITY(1,1) not null,
    MessageHeader varchar (50) not null,
    PRIMARY KEY (PK)
)
GO

CREATE TABLE [MessageBodiesWithPK]
( 
    PK int not null,
    MessageBody varchar(50) null,
    PRIMARY KEY (PK),
    FOREIGN KEY (PK) REFERENCES [Messages] (PK)
)
GO

Если вы не можете изменить свою схему, вам придется отредактировать файл LSML вручную. Это не поддерживается, но я использовал это исправление в прошлом, чтобы исправить области, в которых разработчик данных не угадал мои намерения правильно, в частности, чтобы исправить подразумеваемый ключ в представлениях SQL. Вы должны искать атрибут Multiplicity для элемента AssociationEnd — установите для него значение «Много» на «Один».

Чтобы было ясно: я бы считал ручное редактирование LSML последним средством. Обязательно проверьте свою работу, прежде чем делать это, потому что все приложение может быть повреждено, если вы сделаете ошибку (я упоминал, что LSML недокументирован?). В любом случае, если вы хотите попробовать, загляните в каталог данных вашего проекта.

person Paul Keister    schedule 12.09.2011
comment
Просто хотел добавить, если вы делаете столбец обнуляемым, а LS не распознает изменение: кратность недействительна ... Поскольку все свойства в зависимой роли обнуляемые, кратность основной роли должна быть «0..1 ' в этом случае вы удалите строку Multiplicity из LSML. (Значения: «Один», «Много» или вообще без строки для 0..1) - person Christopher Galpin; 09.11.2012