2017-02-28 52 views
0

我得到錯誤;構造函數中的EF關係

無法隱式轉換類型單位的ICollection

我這樣做的時候,我已經在一些例子中看到它,它是可以這樣做。

Sale sale= new Sale(){ Id = 1 }; 
Service service = new Service() { Name= "SomeService",Sales=sale}; //I can't assign sale 


public class Service: EntityBase 
{ 
    //public Service() 
    //{ 
    // Sales= new HashSet<Sale>(); 
    //} 
    public string Name{ get; set; } 
    public virtual ICollection<Sale> Sales{ get; set; } 
} 

我該如何解決它? 我不想這樣做:service.Sales.add(fact),如果有另一種方式

+0

IMO異常消息是非常自我解釋。 – Igor

+0

是的,我知道,但這不可能像這樣分配? 新服務(){名稱=「SomeService」,銷售=銷售} – gvivetapl

+0

不,這將完全打破類型安全。如果你可以這樣做,那麼你可以給一個'string'引用或'HashSet'分配一個'int'到一個'DateTime',你不能這樣做的事實稱爲類型安全,它在編譯時被檢查並且是件好事。假設你可以做到這一點(*,你可以用一些錯誤的*),你會得到一個運行時間'NRE'(*或無效的演員例外,在某個點*),因爲'Collection '和'Sale'是不是一回事。 – Igor

回答

1

如果你非常反對使用.Add,想要給一個或多個Sale實例傳遞給Service實例,並讓他們加入到Sales集合,那麼你可以添加第二個構造函數,一個或多個Sale實例像這樣。

public class Service: EntityBase 
{ 
    public Service() // empty constructor needed for EF 
    {} 

    public Service(params Sale[] sales) 
    { 
     Sales = new List<Sale>(sales); 
    } 

    public string Name{ get; set; } 
    public virtual ICollection<Sale> Sales{ get; set; } 
} 

// example with 2 sales 
Sale sale1 = new Sale(){ Id = 1 }; 
Sale sale2 = new Sale(){ Id = 2 }; 
Service service = new Service(sale1,sale2) { Name= "SomeService" }; 

將空構造函數保留在EF中使用的位置。

0

你在這裏說的是,一個Sale = List();

列出銷售額,向其中添加銷售額,然後在構造函數中聲明Sales =銷售額列表。

Sale sale = new Sale(){ Id = 1 }; 

List<Sale> sales = new List<Sale>(); 

sales.Add(sale); 

Service service = new Service() { Name = "Service", Sales = sales };