2011-04-05 83 views
0

我有一个产品对象及其中的相关类别。EF代码优先CTP5空子对象处理

我把产品和类别之间的关系看作是一对多的关系。但类别也可以为空。

麻烦是我似乎无法处理空的类别对象。

我想在我的产品类别如下:

private Category _category; 

public virtual Category Category 
{ 
    get { return _category ?? (_category = new Category()); } 

    set { _category = value; } 
} 

而且在我的数据库上下文OnModelCreating方法:

modelBuilder.Entity<Product>() 
       .HasRequired(p => p.Category) 
       .WithMany(c => c.Products) 
       .HasForeignKey(p => p.CategoryId); 

不幸的是在我的设计层访问Product.Category它总是返回新类别实例,而不是尝试通过Product.CategoryId(其中确实具有值)来拉类别。

如何设置我的模型来处理空类别?

+0

模型可能不是这样做的最好的地方。我会建议创建一个部分类并在那里处理它。您需要在模型中处理它吗? – lukiffer 2011-04-05 09:59:29

+0

但我在一个类(产品类)中处理它,虽然是的,那是模型...你是否建议在我的设计层和模型之间添加另一个层来检查空值? – bananaFly 2011-04-05 10:10:53

+0

Btw。你知道CTP5是过时的版本吗?当前版本是EF 4.1 RC。 – 2011-04-05 18:12:03

回答

0

如果Category是可选的(这是因为它可以为null)必须使用:

modelBuilder.Entity() .HasOptional(P => p.Category) .WithMany(C => C^.Products) .HasForeignKey(p => p.CategoryId);

,并定义你的产品为:

public class Product 
{ 
    ... 
    public int? CategoryId { get; set; } 
    public virtual Category { get; set; } 
}