Как я могу определить Nullable EntitySet <>? - PullRequest
5 голосов
/ 21 октября 2011

Для каждой сущности, которая имеет отношение один ко многим с другой сущностью, когда я пытаюсь добавить новый элемент, мне кажется, что я должен определить этот список элементов, который относится к этой сущности. Например, допустим, у меня есть объект ProductType, который имеет список Products следующим образом:

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

когда я пытаюсь добавить новый ProductType вот так:

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

это дает мне исключение, что Products равно нулю:

Object reference not set to an instance of an object

та же проблема со всеми сущностями, имеющими отношение один ко многим с другими сущностями. так как я могу разрешить нулевой для EntitySet <>, который представляет отношение один ко многим

1 Ответ

3 голосов
/ 21 октября 2011

Вам не хватает созданного конструктора, устанавливающего значение по умолчанию для набора сущностей Products.Сравните это с тем, что дизайнер создает для вас.Например, конструктор Product для Northwind выглядит так:

    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();
    }
...