为什么我不能在Entity Framework表中插入行?

时间:2018-05-04 18:03:22

标签: c# entity-framework

我已经使用该选项从DB生成EF代码。当我尝试插入时,我收到错误" bundle_id"即使我插入的内容有一个bundle_id,也是必需的。

这是我的代码

[Table("[storage.tblCBMinCreditRequirement]")]
public partial class storage_tblCBMinCreditRequirement
{
    [Key]
    [Column(Order = 0)]
    [StringLength(255)]
    public string bundle_id { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(255)]
    public string deal_detail_id { get; set; }

    [StringLength(10)]
    public string version_code { get; set; }

    [StringLength(255)]
    public string applicant_id { get; set; }

    [StringLength(255)]
    public string score { get; set; }

    [StringLength(255)]
    public string thin_no_hit { get; set; }

    [StringLength(255)]
    public string thin_no_hit_proxy { get; set; }

    [StringLength(255)]
    public string thin_file { get; set; }

    [StringLength(255)]
    public string thin_file_no_hit { get; set; }

    [StringLength(255)]
    public string limited_credit_flag { get; set; }

    [StringLength(255)]
    public string limited_credit_empl { get; set; }

    [StringLength(255)]
    public string limited_credit_sat_auto { get; set; }

    [StringLength(255)]
    public string qualified_trades { get; set; }

    [StringLength(255)]
    public string sat_auto_mortgage_trade { get; set; }

    [StringLength(255)]
    public string min_num_sat_auto_trade { get; set; }

    [StringLength(255)]
    public string total_bks { get; set; }

    [StringLength(255)]
    public string delinquent_mortgage { get; set; }

    [StringLength(255)]
    public string delinquent_auto { get; set; }

    [StringLength(255)]
    public string high_credit_amount { get; set; }

    [StringLength(255)]
    public string min_age_on_file { get; set; }

    [StringLength(255)]
    public string min_fico { get; set; }

    [Column(TypeName = "numeric")]
    public decimal? CBCreditScoreFactors_Id { get; set; }
}

storage_tblCBMinCreditRequirement newt = InsertTable<storage_tblCBMinCreditRequirement>(new storage_tblCBMinCreditRequirement(), "/Loan/CoApplicant/CBCreditScoreFactors/CBMinCreditRequirement");

db.storage_tblCBMinCreditRequirement.Add(newt); 
db.SaveChanges();//throws exception

这是我的数据库。 DB Image

这是我的实体 Entity 1 Entity 2

这是我的错误 enter image description here

感谢您的帮助,我很难过! :)现在,这是一首堆栈溢出的诗,因为想要更多的描述而荒谬。

堆栈溢出,   你应该知道, 该代码是模式,   在机器上显示我的愤怒。

我还能如何调试你?你想要我什么虚荣的话? 我的空话必须有用吗?你如何确定我的单词和代码的价值?代码不够吗?强迫诗歌对你是否正义,O&#39; Stack Overflow?

2 个答案:

答案 0 :(得分:3)

为了添加@ DevilSuichiro的原始评论,您需要在您的实体的属性bundle_id上​​设置DatabaseGeneratedOption.None,如下所示。提供了完全限定的名称,因此您无需寻找命名空间:)

[Key]
[Column(Order = 0)]
[StringLength(255)]   
[DatabaseGenerated(DatabaseGeneratedOption.None)] // Located here: System.ComponentModel.DataAnnotations.Schema
public string bundle_id { get; set; }

<强>为什么吗

默认情况下,在主键列的Entity Framework中设置DatabaseGeneratedOption.Identity。这表示数据库负责生成值。因此,实体框架会从任何生成的SQL Insert 语句中排除该列,因为它期望SQL生成该值。

要查看此操作,请使用

yourDbContext.Database.Log() = (query) => Debug.WriteLine(query);

在执行SaveChanges或运行SQL事件探查器之前,查看生成的SQL中的差异。

<强>更新

为清楚起见,当您使用Database.Log()=(query)=&gt;的Debug.WriteLine(查询);结果将输出到Visual Studio的“诊断工具”窗口。当您启动调试会话时,默认情况下会启动此操作,除非您之前关闭了窗口。

如果在调试时没有显示它,可以在此处找到:Debug - &gt; Windows - &gt;显示诊断工具。

以下是一个示例输出,以便您知道您在寻找什么:

Sample Diagnostic Tool Output

答案 1 :(得分:-1)

您可以在cshtml文件中尝试隐藏bundle_id