我有一个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,Price属性和ClosetHistory未创建和这是真的,因为多对多关系中的两个表之间的表没有表示为实体,但是如果我从ClosetHistory表中删除startdate和enddate,price字段并重新编写我的实体,它就可以工作并创建关系 但后来我无法保存壁橱的开始时间和结束时间以及价格
你可以帮帮我吗?我很抱歉所有这些解释,我很抱歉我的英语,我知道这非常糟糕:)
答案 0 :(得分:2)
您可以使用4个表格方案和一对“插入”和“删除”触发器来解决您的问题。
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