2011-02-23 158 views
2

我有一個sql server數據庫和一個c#win窗體應用程序,我使用實體框架。在實體框架中映射多對多關係

在我有以下表的數據庫:

Table Joint(
     JointID 
     FirstName 
     FatherName 
     LastName) 

代表在健身房 一個關節和每個關節都有一個衣櫃,每個關節都有一個衣櫃,每個衣櫥裏可以通過一個聯合是租金。 所以我想這一對一的關係,我不知道如果這是真的,但無論如何這個衣櫃,茶几:

Table Closet(
    ClosetID 
    Number) 

,但在同一時間,我想保持一個歷史的每個衣櫃,因爲也許有人租爲期2個月,然後有人在第一個房間後租用同一個衣櫃,所以我想知道每個聯合租用這個衣櫃,我想知道誰是自己知道的和他爲衣櫃的租金支付了多少,所以我想要開始時間,結束時間,價格。

最後我想通了,我想上面的表之間的第三表,這將是一個多對多的關係,所以我創建:

Table ClosetHistory(
    JointID  fk 
    ClosetID fk 
    StartTime 
    EndTime 
    Price) 

,我認爲這個權利,但我不知道和這一切都不是我的問題。 我的問題是,當我從數據庫更新我的實體聯合關係和壁櫥之間的關係沒有創建,它創建一個聯合實體獨立和壁櫥實體,但它不包含startTime,EndTime,價格屬性,並且未創建ClosetHistory這是真的,因爲在許多到很多關係中的表之間的表格不表示爲實體,但是如果我從ClosetHistory表中刪除startdate和enddate,price字段並重新生成我的實體,它將起作用,並且創建關係 但隨後我無法保存壁櫥的開始時間和結束時間以及價格

請問您能幫助我嗎?

和我爲人人,這個解釋很抱歉,我很抱歉,我的英語語言,我知道這是非常不好的:)

+1

感謝您編輯Carnotaurus,但這是我的第一篇文章,我以爲我的標籤只爲我的文章的主要議題。 – AlaaL 2011-02-23 22:16:54

+0

來的人我需要你的幫助,只是建議一些東西。 – AlaaL 2011-02-24 11:30:31

回答

2

您可以使用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 
+0

謝謝,但首先你沒有把價格字段,第二個最終用戶誰將進入startDate和EndDate,價格。 – AlaaL 2011-02-24 19:17:12