【问题标题】:Add related data to cross reference table in Entity Framework 5 (Code-First)将相关数据添加到 Entity Framework 5 (Code-First) 中的交叉引用表
【发布时间】:2013-07-24 17:36:34
【问题描述】:

假设我有以下两个模型:

Person             N
Subscription       N

它们是多对多的关系(每个Person可以有多个Subscription,每个Subscription可以有多个Person),所以Entity Framework创建了一个交叉引用表:

PersonSubscriptions:  PersonId  |  SubscriptionId

如果我想记录每个人何时开始订阅,那么在交叉引用表中有一个日期列是最有意义的:

PersonSubscriptions:  PersonId  |  SubscriptionId  |  SubscribedOn

我如何使用 Entity Framework 来实现这一点,我将如何查询,例如,让所有在 X 天之后订阅给定订阅的人员?

【问题讨论】:

    标签: c# many-to-many entity-framework-5 code-first cross-reference


    【解决方案1】:

    s在这种情况下,您不再有传统意义上的多对多关系,而是与第三个实体有 2 个不同的一对多关系。本质上,您将有 3 个类可以使用:

    Public Class Person {
        public int PersonId {get;set;}
        public virtual IEnumerable<SubscriptionInfo> SubscriptionInfos {get;set;}
    }
    
    Public Class Subscription {
        public int SubscriptionId {get;set;}
        public virtual IEnumberable<SubscriptionInfo> SubscriptionInfos {get;set}
    }
    
    Public Class SubscriptionInfo {
        public int PersonId {get;set;}
        public int SubscriptionId {get;set;}
        public DateTime SubscribedOn {get;set;}
    
        [RelatedTo(ForeignKey="PersonId")]
        Public virtual Person Person {get;set;}
    
        [RelatedTo(ForeignKey="SubscriptionId")]
        Public virtual Subscription Subscription {get;set;}
    }
    
    var db = new PeopleSubscribedEntities();
    var subscription = db.Subscriptions.Find(1);
    var people = subscription.SubscriptionInfos.Select(si => si.Person 
                                                      && si => si.SubscribedOn > someDate);
    

    如果 Entity Framework 将此表视为多对多,您将失去额外的属性。

    【讨论】:

    • 谢谢,安德鲁!您是否希望您的示例代码创建我在问题中概述的表格?还是单独的 SubscriptionInfo 表?
    • 我只是在我的示例中将其称为 SubscriptionInfo,但如果它被命名为 PersonSubscriptions,它将创建一个名为 that 的表,其中包含 3 个字段...我主要是提供一个方向代码,但名称当然可以更改。使用我使用的类名,Entity Framework 将创建一个 SubscriptionInfo 表而不是默认的连接表。
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2022-01-18
    • 2012-04-03
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多