【问题标题】:Seeding a foreign key using code first in c#在 C# 中首先使用代码播种外键
【发布时间】:2014-04-16 01:00:22
【问题描述】:

我在为我的数据库播种和给外键赋值时遇到问题。

这是我的 UserPains 模型:

public partial class UserPain
    {
        public int Id { get; set; }
        public int ScoredBy { get; set; }
        public DateTime LastUpdated { get; set; }

        public virtual Defect Defects { get; set; }

    }

这是我的缺陷模型:

public partial class Defect
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
}

所以当我播种时:

new UserPain { ScoredBy = 1, LastUpdated = DateTime.Now }

UserPain 表中标记为 Defects_Id 的值为空。如何将 Defects_Id 的值分配给缺陷表中现有缺陷的 id?

【问题讨论】:

    标签: c# ef-code-first foreign-keys entity-framework-migrations


    【解决方案1】:

    您可以将Defect 属性设置为您创建或从数据库中获取的Defect 实例。或者,您可以将 ID 字段添加到您的 UserPain 对象并设置它:

    public partial class UserPain
    {
        // ...
    
        [Column("Defects_Id")]
        public int DefectId { get; set; }
    
        [ForeignKey("DefectId")]
        public virtual Defect Defect { get; set; }
    
    }
    

    现在您也可以在没有实例的情况下设置DefectId。在此过程中,我为您将属性名称单数化了!

    【讨论】:

    • 所以我在公共虚拟缺陷上方添加了 ForeignKey 标签。我如何在仅 id 的种子中解决这个问题,它让我可以选择将缺陷设置为等于某个值,但它期望缺陷模型?
    • @Shawn: Err,设置DefectId字段我也添加了?
    • 嗯,我在 userpain 模型中添加了这两个属性。当我尝试更新数据库时得到这个 - INSERT 语句与 FOREIGN KEY 约束冲突
    • @Shawn: ...在您保存更改时,引用的 ID 是否存在于数据库中?
    • 外键在正确的路径中,但最后的错误我不确定,它说冲突发生在数据库“MyDB”,表“dbo.Defects”,列'身份证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    相关资源
    最近更新 更多