【问题标题】:EF Code First CTP5 Null child Object handlingEF Code First CTP5 Null 子对象处理
【发布时间】:2011-04-05 09:54:20
【问题描述】:

我有一个 Product 对象,里面有一个相关的 Category。

我将产品和类别之间的关系视为一对多。但 Category 也可以为 null。

问题是我似乎无法处理空类别对象。

我在我的产品类中尝试了以下内容:

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 时,它总是返回 New Category 实例,而不是尝试通过 Product.CategoryId 提取 Category(确实有一个值)。

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

【问题讨论】:

  • 模型可能不是这个的最佳位置。我建议创建一个部分类并在那里处理它。您是否有理由需要在模型中处理它?
  • 但是我在一个类(产品类)中处理它,虽然是的,那是模型......您是否建议在我的设计层和模型之间添加另一层以检查空值?
  • 顺便说一句。你知道CTP5是过时的版本吗?当前版本是 EF 4.1 RC。
  • @Ladislav Mrnka 谢谢,我去看看

标签: entity-framework ef-code-first entity-framework-ctp5


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2013-04-16
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多