2011-11-28 11 views
2

我被JL親自告訴我需要禁用延遲加載,並從我的代碼刪除虛函數,所以:EF 4.1:不能添加收藏 - 對象引用不設置到對象的實例

一域:

public class Parent 
    { 
     public int Id { get; set; } 
     public ICollection<Child> Children { get; set; } 
    } 

    public class Child 
    { 
     public int Id { get; set; } 
     public int FK_ParentId { get; set; }    

     [ForeignKey("FK_ParentId")] 
     public Parent Parent { get; set; } 
    } 

二, DAL:

public DataContext() 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
    } 

三, program.cs

 var clientSvc = new ClientSvcRef.ServiceClient();    
     var parent = new Parent(); 
     var child = new Child {Parent = parent}; 
     parent.Children.Add(child); 
     clientSvc.AddParent(parent); 

問題:program.cs中的第4行:「對象引用未設置爲對象的實例」。

+0

錯誤出現是因爲您的子女屬性爲空您不能添加那裏的東西「parent.Children = new List ();」 – Mark

回答

4

至少有兩種方法來解決這個問題:

(1)自己初始化集合在構造函數中,

public Parent() { 
    Children = new List<Child>(); 
} 

或(2)使用Create()代替new

var p = _db.Parents.Create(); 
var c = _db.Children.Create(); 
c.Parent = p; 
+0

謝謝das,#1工作。自從我使用WCF以來,我無法使用#2。對於在此場景中使用WCF的其他人,請確保父類的屬性爲[DataContract(IsReference = true)] – aaa

相關問題