我有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; }
}
当您创建上述关系时,通过创建NotificationMessageDevices,实体flamework足以聪明地在Database上创建多对多的关系。
问题在这里上升。现在我想将CreateDate添加到表'NotificationMessageDevices'中。我所做的是我创建了一个名为'NotificationMessageDevice'的新类,实体框架将在现有数据库中创建表“NotificationMessageDevices”。我添加了新属性并调用了Update-Verbose。第一个例外是关于缺少ID属性它希望我添加public int ID {get; set;}但是当我添加它时它意识到ID属性是index属性,所以我需要删除该表中的所有数据。
本案例的解决方法是什么是没有数据丢失的实体框架:)
答案 0 :(得分:1)
您可以像这样创建链接实体:
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; }
}
然后,您需要自己处理迁移到此新实体以避免数据丢失。如果您使用代码优先迁移,则需要添加手动迁移(自动迁移会导致数据丢失),然后编辑脚本以便不删除数据。