Database design 实体框架4.1代码优先-具有多个关系的外键?

Database design 实体框架4.1代码优先-具有多个关系的外键?,database-design,entity-framework-4.1,ef-code-first,Database Design,Entity Framework 4.1,Ef Code First,使用实体中的代码优先方法,是否可以建立与单个外键关联的多个关系 例如,假设我有以下课程: public class BuzzItem { public int BuzzItemID { get; set; } public string Title { get; set; } public string Description { get; set; } // Collection of Comments

使用实体中的代码优先方法,是否可以建立与单个外键关联的多个关系

例如,假设我有以下课程:

public class BuzzItem
{
    public int      BuzzItemID      { get; set; }
    public string   Title           { get; set; }
    public string   Description     { get; set; }

    // Collection of Comments posted about this BuzzItem (FOREIGN KEY)
    public virtual ICollection<Comment> Comments { get; set; }
}

public class Merchant
{
    public int      MerchantID      { get; set; }
    public string   Name            { get; set; }

    // Collection of Comments posted about this Merchant (FOREIGN KEY)
    public virtual ICollection<Comment> Comments { get; set; }
}

public class Comment
{
    public int      CommentID       { get; set; }
    public string   Comment         { get; set; }

    // These would both be a FOREIGN KEY to their respectivate tables
    public virtual BuzzItem BuzzItemID { get; set; }
    public virtual Merchant UserID { get; set; }
}
公共类BuzzItem
{
public int BuzzItemID{get;set;}
公共字符串标题{get;set;}
公共字符串说明{get;set;}
//关于此BuzzItem发布的评论的集合(外键)
公共虚拟ICollection注释{get;set;}
}
公营商人
{
public int MerchantID{get;set;}
公共字符串名称{get;set;}
//关于该商户的评论收集(外键)
公共虚拟ICollection注释{get;set;}
}
公开课评论
{
public int CommentID{get;set;}
公共字符串注释{get;set;}
//它们都是各自表的外键
公共虚拟BuzzItem BuzzItemID{get;set;}
公共虚拟商户用户标识{get;set;}
}
是否可以将两个外键变量替换为可以建立双重关系并接受BuzzItem或商户对象的单个变量


为了简洁起见,我从scrap中草拟了这个示例,因此如果我的代码中有任何拼写错误,我深表歉意,但我试图实现的总体想法希望是清楚的。

不,这是不可能的。EF的行为与数据库完全相同-FK紧挨着单一实体类型的单一关系。顺便说一句,导航属性不是FK,FK隐藏在导航属性后面,但仍然是真的-导航属性不能在多个关系之间共享。

使用,这可以通过使用

来实现。是否可以改为尝试以下操作:
公共虚拟int-SourceID{get;set;}
然后使用RTTI将其强制转换为BuzzItem或Merchant对象?如果是这样的话,你对我如何实现它有什么建议吗?+1因为从技术上来说,这是我一直在寻找的解决方案。但正如在您链接到的另一个问题中一样,实体超类除了拥有一个没有公共属性的EntityID变量之外没有任何用途,正如他们指出的那样,这不是一个好的设计。然而,我不是一个完全基于严格设计原则的合法解决方案的人,所以我可能会选择这条路线。不过,仍然希望有一种更优雅的方法。