Соотнесите связь многих со многими в рамках сущности - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть база данных sql server и приложение c # win, и я использую Entity Framework.

В базе данных у меня есть следующие таблицы:

Table Joint(
      JointID
      FirstName
      FatherName
      LastName)

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

Table Closet(
   ClosetID
   Number)

но в то же время я хочу сохранить историю для каждого шкафа, потому что, возможно, кто-то арендует его на 2 месяца, а затем кто-то арендует тот же шкаф после первого, поэтому я хочу знать, что каждый совместный арендует этот шкаф, и я Я хочу знать, кто его знает, и сколько он заплатил за аренду шкафа, поэтому я хочу время начала, время окончания, цену.

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

Table ClosetHistory(
   JointID     fk
   ClosetID    fk
   StartTime
   EndTime
   Price)

и я думаю, что это правильно, но я не уверен, и это все не моя проблема. Моя проблема заключается в том, что, когда я обновляю свои сущности из базы данных, связь между соединением и закрытым шкафом не создается, и это создает отдельную объединенную сущность и закрытый объект, но он не содержит атрибутов startTime, EndTime, Price и не созданной ClosetHistory и это верно, потому что таблица между буксирными таблицами во многих отношениях для многих не представлена ​​как сущность, но если я удаляю startdate и enddate, поля цен из таблицы ClosetHistory и повторю мои сущности, это работает, и связь создается но тогда я не могу сохранить время начала и время окончания и цену на шкафы

Можете ли вы помочь мне, пожалуйста, ??

и я прошу прощения за все это объяснение, и я прошу прощения за мой английский язык, я знаю, что это очень плохо :)

1 Ответ

2 голосов
/ 24 февраля 2011

Вы можете использовать схему из 4 таблиц и пару триггеров вставки и удаления, чтобы решить вашу проблему. enter image description here

CREATE TRIGGER [dbo].[AddTrigger]
   ON [dbo].[ClosetJoint]
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;
    DECLARE @JointId INT;
    DECLARE @ClosetId INT;

    SET @ClosetId = (SELECT ClosetID FROM inserted);
    SET @JointId = (SELECT JointID FROM inserted);

    INSERT INTO ClosetHistory(ClosetID, JointID, StartTime)
     VALUES(@ClosetId, @JointId, GETDATE())
END

CREATE TRIGGER [dbo].[DeleteTrigger]
   ON [dbo].[ClosetJoint]
   AFTER Delete
AS 
BEGIN
    SET NOCOUNT ON;
    DECLARE @JointId INT;
    DECLARE @ClosetId INT;

    SET @ClosetId = (SELECT ClosetID FROM deleted);
    SET @JointId = (SELECT JointID FROM deleted);

    UPDATE ClosetHistory SET EndTime = GETDATE()
    WHERE ClosetID = @ClosetId AND JointID = @JointId AND EndTime IS NULL
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...