我不能以一对一的关系为我的数据库播种

时间:2014-02-03 10:35:14

标签: entity-framework

我正在尝试为我的数据库播种,但我遇到了问题。我正在使用Entity Framework中的一对一/ null关系。 下面是我的实体对象和关系。

 public class ApplicationSetting
 {
    //This is the primary key of this table entity
    public int ApplicationSettingID { get; set; }

    public string SmtpServer { get; set; }

    public string AlternateCompanyEmail { get; set; }

    public int SmtpPort { get; set; }

    public string SmtpUsername { get; set; }
}


public class LivechatSetting
{
    [System.ComponentModel.DataAnnotations.Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //This is giong to enable an auto increment on the field
    public int? ApplicationSettingID { get; set; }

    public string LivechatEmail { get; set; }

    public int OperatorsMaximumchat { get; set; }

    public TimeSpan ResumptionTime { get; set; }

    public TimeSpan ClosingTime { get; set; }

    public TimeSpan ChatTimeOut { get; set; }
}

我的DatabaseContext类中的关系

modelBuilder.Entity<ApplicationSetting>()
            .HasOptional(client => client.LivechatSetting)
            .WithRequired(client => client.ApplicationSetting);

我能够将数据成功保存到我的数据库中的ApplicationSetting实体表中。

但是当我尝试使用ApplicationSetting表的id将值赋入我的LivechatSetting表时,我得到以下错误。

  

ReferentialConstraint中的依赖属性映射到a   存储生成的列。列:'ApplicationSettingID'。描述:   在执行当前期间发生了未处理的异常   网络请求。请查看堆栈跟踪以获取更多信息   错误以及它在代码中的起源。

     

异常详细信息:System.InvalidOperationException:依赖项   ReferentialConstraint中的属性映射到存储生成的   柱。列:'ApplicationSettingID'。

     

来源错误:

     

第26行:context.LivechatSettings.Add(setting);线   27:第28行:result = context.SaveChanges();

2 个答案:

答案 0 :(得分:2)

最后我自己解决了。按照该链接寻求解决方案。 weblogs.asp.net/manavi/archive/2011/05/01/...。我按照他们的例子

答案 1 :(得分:0)

根据我的理解,如果“ApplicationSettingID”字段是“ApplicationSetting”表的主键

如果“Livechatsetting”被引用为“ApplicationSettingID”作为外键的表。

将“Livechatsetting”的“ApplicationSettingID”作为身份(自动生成的字段)自然会出错