gpt4 book ai didi

c# - 首先修改由 EF5 代码创建的多对多表

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:37 25 4
gpt4 key购买 nike

我有 2 个类,一个是另一个的集合属性,如下所示。

public class NotificationMessage
{
public int ID { get; set; }
public string Message { get; set; }
public virtual ICollection<Device> Devices { get; set; }
}

public class Device
{
public int ID { get; set; }
public string Token { get; set; }
public virtual ICollection<NotificationMessage> NotificationMessages { get; set; }
}

public class NotificationMessageDevice
{
[Column(Order = 0), Key, ForeignKey("NotificationMessage")]
public int NotificationMessageID { get; set; }

[Column(Order = 1), Key, ForeignKey("Device")]
public int DeviceID { get; set; }


public virtual Device Device { get; set; }
public virtual NotificationMessage NotificationMessage { get; set; }
}

当您创建上述关系时,实体 flamework 足够聪明,可以通过创建 NotificationMessageDevices 在数据库上创建多对多关系。

问题就在这里。现在我想将 CreateDate 添加到表 'NotificationMessageDevices' 中。我所做的是,我以 Entity Framework 在现有数据库中创建表“NotificationMessageDevices”的方式创建了一个名为“NotificationMessageDevice”的新类。我添加了新属性并调用了 Update-Verbose。第一个异常是关于缺少 ID 属性,它希望我添加 public int ID {get;set;} 但是当我添加它时它意识到 ID 属性是索引属性,因此我需要删除该表中的所有数据。

在没有数据丢失的情况下, Entity Framework 上这种情况的解决方法是什么:)

最佳答案

您可以像这样创建链接实体:

public class DeviceNotificationMessages
{
public DeviceNotificationMessages()
{
CreateDate = DateTimeOffset.Now;
}

[Column(Order = 0), Key, ForeignKey("NotificationMessage")]
public int NotificationMessageId { get; set; }
public virtual NotificationMessage NotificationMessage { get; set; }
[Column(Order = 1), Key, ForeignKey("Device")]
public int DeviceID { get; set; }
public virtual Device Device { get; set; }

public DateTimeOffset CreateDate { get; set; }
}

然后您需要自己处理到这个新实体的迁移,以避免数据丢失。如果您使用代码优先迁移,则需要添加手动迁移(自动迁移会导致数据丢失),然后编辑脚本以免数据被删除。

关于c# - 首先修改由 EF5 代码创建的多对多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13268665/

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