C# Entity Framework Code-First-如何仅使用该外键的 id 添加带有外键的行?
Posted
技术标签:
【中文标题】C# Entity Framework Code-First-如何仅使用该外键的 id 添加带有外键的行?【英文标题】:C# Entity Framework Code-First- How do you add a row with foreign key using just the id of that foreign key? 【发布时间】:2021-06-17 05:21:37 【问题描述】:如果我有以下类(使用 CodeFirst 实体框架):
public class Notifications
[Key]
public int ID get; set;
public virtual ClientDetails Client get; set;
public virtual NotificationTypes NotificationType get; set;
public virtual NotificationFreqs Frequency get; set;
public virtual NotificationStatus Status get; set;
public DateTime SendDate get; set;
public DateTime? SentDate get; set;
public DateTime QueueDate get; set;
public class NotificationFreqs
[Key]
public int ID get; set;
[MaxLength(25)]
public string Name get; set;
public class NotificationStatus
[Key]
public int ID get; set;
[MaxLength(25)]
public string Status get; set;
添加新通知时,最有效的说法是notification.status = 1
是什么?
我是否必须每次都查询数据库才能获得可用的列表?
var notification = new Notifications();
var notificationType = db.NotificationTypes.FirstOrDefault(n => n.ID == notificationTypeId);
var notificationFreq = db.NotificationFreqs.FirstOrDefault(n => n.Name == setting.Value);
notification.NotificationType = notificationType; // Works
notification.Frequency = notificationFreq; // Works
notification.Status = new NotificationStatus ID = 1 ; // Obviously doesn't work
我觉得多次访问数据库效率低下,但我确实希望这些值标准化并在数据库中。
有什么建议或者我正在做的NotificationType
& Frequency
是唯一的方法吗?
谢谢!
【问题讨论】:
【参考方案1】:你必须修复你的课程。添加 ID 字段:
public class Notifications
[Key]
public int ID get; set;
public virtual ClientDetails Client get; set;
[ForeignKey("NotificationType")]
public int? Type_ID get; set;
public virtual NotificationTypes NotificationType get; set;
[ForeignKey("Frequency")]
public int? Frequency_ID get; set;
public virtual NotificationFreqs Frequency get; set;
[ForeignKey("Status")]
public int? Status_ID get; set;
public virtual NotificationStatus Status get; set;
public DateTime SendDate get; set;
public DateTime? SentDate get; set;
public DateTime QueueDate get; set;
在这种情况下:
notification.Type_ID = notificationTypeId;
notification.Frequency_ID = notificationFreq.ID;
notification.Status_ID = 1
【讨论】:
这会在数据库中添加另一列吗?通过使用虚拟列,它已经添加了一个名为 Frequency_ID、Status_ID 等的列。 啊,我应该提到我正在做代码优先数据库。 在这种情况下,您必须使用现有的列。我会更新我的答案。 不错!这正是我所需要的,在将它们切换为不可为空(删除?)之后,它也修复了外键设置中的一些问题。谢谢!以上是关于C# Entity Framework Code-First-如何仅使用该外键的 id 添加带有外键的行?的主要内容,如果未能解决你的问题,请参考以下文章
违反主键Entity Framework Code First
转:Entity Framework 5.0 Code First全面学习
Entity Framework Code First Conventions
使用 Entity Framework 6.1 和 MVC 5 从数据库中使用 Code First 后如何同步模型?
Entity Framework Code-First(23):Entity Framework Power Tools