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到很多这样的关系中的父?
由于 格雷格