2011-02-23 174 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