EF4 CTP5 - 映射没有对象引用的外键?

Posted

技术标签:

【中文标题】EF4 CTP5 - 映射没有对象引用的外键?【英文标题】:EF4 CTP5 - Map foreign key without object references? 【发布时间】:2011-03-05 22:42:35 【问题描述】:

我觉得这应该有一个简单的答案,但我找不到。

我有 2 个 POCO:

public class Category

    public int Id  get; set; 
    public string Name  get; set; 


public class Product

    public int Id  get; set; 
    public int CategoryId  get; set; 

请注意,两个 POCO 上都没有对象引用。使用 Code-First,如何让 EF4 CTP5 定义两个数据库表之间的关系?

(我知道这是一个不寻常的场景,但我正在探索 Code-First 的可能性和不可能性)

【问题讨论】:

【参考方案1】:

不,这是不可能的。正如您在下面看到的,所有用于设置关联的 fluent API 方法都需要指定 Navigation Property 作为其参数。

HasMany<TTargetEntity>(Expression<Func<TEntityType, ICollection<TTargetEntity>>> navigationPropertyExpression) 

HasOptional<TTargetEntity>(Expression<Func<TEntityType, TTargetEntity>> navigationPropertyExpression) 

HasRequired<TTargetEntity>(Expression<Func<TEntityType, TTargetEntity>> navigationPropertyExpression) 

【讨论】:

谢谢。我也是这么想的。 实际上,如果我不使用 Code-First 并且我破解了 csdl/msl/ssdl 文件,您认为这可能吗? 我不这么认为,但我不确定,不过你可以试一试。【参考方案2】:

您是否有什么特别的原因不想使用对象引用?使用它们看起来非常优雅:

public class Category

    public int Id  get; set; 
    public string Name  get; set; 
    public virtual ICollection<Product> Products  get; set; 


public class Product

    public int Id  get; set; 
    public Category Category  get; set; 

您仍然可以通过您的产品以product.Category.Id 访问类别 ID。

【讨论】:

如前所述,我正在探索 Code-First 的可能性和不可能性。

以上是关于EF4 CTP5 - 映射没有对象引用的外键?的主要内容,如果未能解决你的问题,请参考以下文章

EF4 CTP5 POCO 中的软删除、导航属性

《企业应用架构模式》 三

如何从对象的外键中获取对象的值?

如何将 Django 模型对象转换为字典并且仍然拥有它们的外键? [复制]

获取请求导致父管理对象的外键为空

在 EF 4 上映射外键而不创建新的 Edmx 文件