C# getter中的自定义查询,用于在缺少复合键的一部分时返回特定值

C# getter中的自定义查询,用于在缺少复合键的一部分时返回特定值,c#,entity-framework,model,composite-primary-key,C#,Entity Framework,Model,Composite Primary Key,我有一个表(Interaction_Data),它有一个由5个数据字段组成的复合键。其中四个键由另一个类(交互)作为外键提供。这给了我一个交互_数据表中缺少键的问题,因此我想要的数据字段总是返回第一个结果,因为它返回多个结果 在InteractionData模型中,我试图在getter中调用SQL查询(请参阅下面的“DataValueNetCost”)。我希望getter根据表中另一个字段的输入返回一个特定值。也就是说,我想得到: 当DATA_DEF_ID=“净成本”时的数据值 交互模型: [T

我有一个表(Interaction_Data),它有一个由5个数据字段组成的复合键。其中四个键由另一个类(交互)作为外键提供。这给了我一个交互_数据表中缺少键的问题,因此我想要的数据字段总是返回第一个结果,因为它返回多个结果

在InteractionData模型中,我试图在getter中调用SQL查询(请参阅下面的“DataValueNetCost”)。我希望getter根据表中另一个字段的输入返回一个特定值。也就是说,我想得到:

当DATA_DEF_ID=“净成本”时的数据值

交互模型:

[Table("INTERACTIONS")]
    public partial class Interaction {
        // NOTE: The primary key for the INTERACTIONS table is a composite key
        //       consisting of:
        //           - ACCOUNT_ID
        //           - CONTACT_DATE
        //           - CONTACT_SEQ
        //           - PAGE

        [Key]
        [Column("ACCOUNT_ID", Order = 0)]
        public int ACCOUNT_ID { get; set; }

        [Key]
        [Column("CONTACT_DATE", Order = 1)]
        public DateTime CONTACT_DATE { get; set; }

        [Key]
        [Column("CONTACT_SEQ", Order = 2)]
        public int CONTACT_SEQ { get; set; }

        [Key]
        [Column("PAGE", Order = 3)]
        public int PAGE { get; set; }

        [ForeignKey("ACCOUNT_ID,CONTACT_DATE,CONTACT_SEQ,PAGE")]
        public InteractionData InteractionData { get; set; }
    }
交互数据模型:

[Table("INTERACTION_DATA")]
    public partial class InteractionData {
        // NOTE: The primary key for the INTERACTION_DATA table is a composite key
        //       consisting of:
        //           - ACCOUNT_ID
        //           - CONTACT_DATE
        //           - CONTACT_SEQ
        //           - PAGE
        //           - DATA_DEF_ID

        [Key]
        [Column("ACCOUNT_ID", Order = 0)]
        public int ACCOUNT_ID { get; set; }

        [Key]
        [Column("CONTACT_DATE", Order = 1)]
        public DateTime CONTACT_DATE { get; set; }

        [Key]
        [Column("CONTACT_SEQ", Order = 2)]
        public int CONTACT_SEQ { get; set; }

        [Key]
        [Column("PAGE", Order = 3)]
        public int PAGE { get; set; }

        // IN THE DB TABLE THIS IS ALSO PART OF THE COMPOSITE KEY
        // BUT DATA_DEF_ID DOES NOT EXIST IN THE INTERACTIONS TABLE
        // SO I CAN'T NAME IT A PART OF THE COMPOSITE KEY
        [Column("DATA_DEF_ID")]
        [StringLength(60)]
        public string DATA_DEF_ID { get; set; }

        [Column("DATA_VALUE")]
        [StringLength(400)]
        public string DATA_VALUE { get; set; }

        //// Since we are using custom getters and setters we need a backing field
        private string _dataValueNetCost;

        [StringLength(400)]
        public string DataValueNetCost {
            get {
                // We need to get the specific DATA_VALUE when DATA_DEF_ID is "NET_COST"
                // This next section will call a SQL query to get this field and return it.
                SourceCodeContext db = new SourceCodeContext();

                IEnumerable<InteractionData> netCost = db.InteractionsData.SqlQuery(
                    "SELECT DATA_VALUE FROM PBDS.INTERACTION_DATA as id WHERE id.Account_Id = '@p0' AND id.CONTACT_DATE = '@p1' AND " +
                    "id.CONTACT_SEQ = '@p2' AND id.PAGE = '@p3' AND id.DATA_DEF_ID = '@p4'",
                    ACCOUNT_ID, CONTACT_DATE, CONTACT_SEQ, PAGE, "NET_COST"
                );

                string returnString = netCost.ToString();

                return returnString;
            }
            set {
                _dataValueNetCost = value;
            }
        }
    }
[表(“交互数据”)]
公共部分类交互数据{
//注意:INTERACTION_数据表的主键是复合键
//包括:
//-帐户ID
//-联系日期
//-联系方式
//-页面
//-数据定义ID
[关键]
[列(“帐户ID”,顺序=0)]
公共整数帐户\u ID{get;set;}
[关键]
[列(“联系日期”,订单=1)]
公共日期时间联系人\u日期{get;set;}
[关键]
[列(“联系方式”,顺序=2)]
public int CONTACT_SEQ{get;set;}
[关键]
[第列(“第页”,顺序=3)]
公共整型页{get;set;}
//在DB表中,这也是复合键的一部分
//但交互表中不存在数据定义ID
//所以我不能把它命名为复合键的一部分
[列(“数据定义ID”)]
[条次建议修正案(60)]
公共字符串数据\u DEF_ID{get;set;}
[列(“数据值”)]
[长度(400)]
公共字符串数据_值{get;set;}
////因为我们使用的是定制的getter和setter,所以我们需要一个backing字段
私有字符串_dataValueNetCost;
[长度(400)]
公共字符串DataValueNetCost{
得到{
//当数据定义ID为“净成本”时,我们需要获得具体的数据值
//下一节将调用SQL查询以获取此字段并返回它。
SourceCodeContext db=新的SourceCodeContext();
IEnumerable netCost=db.InteractionsData.SqlQuery(
“从PBDS.INTERACTION_数据中选择数据_值作为id,其中id.Account_id='@p0'和id.CONTACT_DATE='@p1'和”+
“id.CONTACT_SEQ='@p2'和id.PAGE='@p3'和id.DATA_DEF_id='@p4',
账户ID,联系人日期,联系人序号,第页,“净成本”
);
string returnString=netCost.ToString();
返回字符串;
}
设置{
_dataValueNetCost=价值;
}
}
}
目前,其结果是DataValueNetCost具有从查询返回的第一个DATA_值记录的值,复合键只需要5个键中的4个

我通过Odata调用获取数据,Odata调用将4个主键发送到交互。我需要在我的视图中的屏幕上显示InteractionData.DataValueNetCost

当DATA_DEF_ID=“NET_COST”返回到视图中的文本字段时,如何返回DATA_VALUE