2011-10-21 10 views
5

Para cada entidad que tiene una relación uno a muchos con otra entidad cuando trato de agregar un nuevo elemento, parece que tengo que definir esta lista de elementos que se relaciona con esta entidad. Por ejemplo, digamos que tengo una entidad ProductType que tiene una lista de Products de la siguiente manera:¿Cómo puedo definir Nullable EntitySet <>?

[Table] 
public class ProductType 
{ 
    [Column(IsPrimaryKey = true, IsDbGenerated = true)] 
    public int Id { get; private set; } 
    [Column] 
    public string Name { get; set; } 

    private EntitySet<Product> _products; 
    [Association(Storage = "_products", ThisKey = "Id", OtherKey = "ProductTypeId")] 
    public EntitySet<Product> Products 
    { 
     get { return _products; } 
     set { _products.Assign(value); } 
    } 
} 

cuando intento añadir un nuevo ProductType así:

ProductType newType = new ProductType { Name = "newType" }; 
_productRepository.Add(newType);  //InsertOnSubmit() and SaveChanges() 

me la da excepción de que Products es nulo:

Object reference not set to an instance of an object 

el mismo problema con todas las entidades que tiene una relación uno a muchos r relación con otras entidades. Entonces, ¿cómo puedo permitir null para el EntitySet <> que representa una de uno a muchos Relación

Respuesta

3

Falta el constructor generado que establece el valor predeterminado para el conjunto de entidades de productos. Compare esto con lo que el diseñador genera para usted. Por ejemplo, el constructor del producto de Neptuno se parece a esto:

public Product() 
    { 
     this._Order_Details = new EntitySet<Order_Detail>(new Action<Order_Detail>(this.attach_Order_Details), new Action<Order_Detail>(this.detach_Order_Details)); 
     this._Category = default(EntityRef<Category>); 
     this._Supplier = default(EntityRef<Supplier>); 
     OnCreated(); 
    } 
+0

Gracias, 1 para usar el diseñador de comparar mis asignaciones, que funciona bien como esto: 'this._products = new EntitySet ((entidad Product) => entity.ProductType = this, (Product entity) => entity.ProductType = null); ' –

+0

Me alegra ayudar. A menudo, la mejor forma de aprender a hacerlo manualmente es ver lo que los diseñadores generan y luego expandir desde allí. –

Cuestiones relacionadas