gpt4 book ai didi

c# - 在 Entity Framework 中映射多对多关系

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:41 24 4
gpt4 key购买 nike

我有一个 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)

我认为这是对的,但我不确定,这不是我的问题。我的问题是,当我从数据库更新我的实体时,未创建关节和衣橱之间的关系,它创建了一个独立的关节实体和一个衣橱实体,但它不包含开始时间、结束时间、价格属性和未创建的衣橱历史这是真的,因为多对多关系中的两个表之间的表未表示为实体,但是如果我从 ClosetHistory 表中删除开始日期和结束日期、价格字段并重新更新我的实体,它就可以工作并创建关系但是我无法保存壁橱的开始时间和结束时间以及价格

你能帮帮我吗??

我为所有这些解释感到抱歉,我为我的英语感到抱歉,我知道这很糟糕:)

最佳答案

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

关于c# - 在 Entity Framework 中映射多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com