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; } 

這些線的這兩個使所述頭部的引用,但只需要第一行。

嘗試刪除第二行。

相關問題