0

我有以下EF4代码优先类:EF4代码优先增加一个实体与虚拟导航属性空的1对多

[Serializable] 
public class WOChangeLogHeader 
{ 
    [Key] 
    public int WOChangeLogHeaderId { get; set; } 
    public DateTime tadded { get; set; } 

    public virtual WorkOrderHeader WO { get; set; } 
    public int WorkOrderHeaderId { get; set; } 

    [MaxLength(50)] 
    public string chng_type { get; set; } 
    [MaxLength(50)] 
    public string chng_process { get; set; } 

    public int chng_by { get; set; } 

    public virtual ICollection<WOChangeLog> ChangeLogRecords {get;set;} 

} 

[Serializable] 
public class WOChangeLog 
{ 
    [Key] 
    public int WOChangeLogId { get; set; } 
    public DateTime tadded { get; set; } 

    public virtual WOChangeLogHeader ChangeLogHeader { get; set; } 
    public int WOChangeLogHeaderId { get; set; } 

    [MaxLength(50)] 
    public string chng_field { get; set; } 
    public string old_value { get; set; } 
    public string new_value { get; set; } 

} 

和设置添加新WoChangeLogHeader的,像这样:

private void addWOChangeLogRecord(string chgField, string oldVal, string newVal, WorkOrderHeader wo) 
    { 


     WOChangeLog log = new WOChangeLog(); 
     log.chng_field = chgField.Trim(); 
     log.old_value = oldVal == null ? "-NULL VALUE-" : oldVal.Trim(); 
     log.new_value = newVal == null ? "-NULL VALUE-" : newVal.Trim(); 
     log.tadded = DateTime.Now; 


     if (CurrentWOChangeLogHeader == null) 
     { 

      CurrentWOChangeLogHeader = new WOChangeLogHeader(); 
      CurrentWOChangeLogHeader.WO = wo; 
      CurrentWOChangeLogHeader.WorkOrderHeaderId = wo.WorkOrderHeaderId; 
      CurrentWOChangeLogHeader.chng_by = -2; 
      CurrentWOChangeLogHeader.chng_process = "WindowsService"; 
      CurrentWOChangeLogHeader.chng_type = "Auto-Update"; 
      CurrentWOChangeLogHeader.tadded = DateTime.Now; 

     } 

     CurrentWOChangeLogHeader.ChangeLogRecords.Add(log); // Error here 

    } 

但是在这一点上ChangeLogRecords导航属性为空,所以我得到一个空对象引用错误...

但是,如果我尝试添加WOChangeLogHeader不添加任何的孩子,所以塔t我随后可以参考它:

WOChangeLog log = new WOChangeLog(); 
log.chng_field = chgField.Trim(); 
log.old_value = oldVal == null ? "-NULL VALUE-" : oldVal.Trim(); 
log.new_value = newVal == null ? "-NULL VALUE-" : newVal.Trim(); 
log.tadded = DateTime.Now; 
log.ChangeLogHeader = CurrentWOChangeLogHeader; 

然后我得到以下错误?

操作失败:无法更改关系,因为一个或多个外键属性是不可空的。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性指定另一个非空值,或者必须删除不相关的对象。

它不会让我上的SaveChanges上下文时ChangeLogRecords为空要么...

如何添加一个新的实体,它是一个1到很多这样的关系中的父?

由于 格雷格

回答

0

该问题可能是这里:

public virtual WOChangeLogHeader ChangeLogHeader { get; set; } 
public int WOChangeLogHeaderId { get; set; } 

这些线的这两个使所述头部的引用,但只需要第一行。

尝试删除第二行。

相关问题