缺少组合键的一部分时,getter中的自定义查询可返回特定值

时间:2019-04-17 23:14:51

标签: c# entity-framework model composite-primary-key

我有一个表( Interaction_Data ),该表具有由5个数据字段组成的复合键。其中的四个键由另一个类( Interactions )作为外键提供。这给我带来了 Interaction_Data 表中键丢失的问题,所以我想要的数据字段始终返回第一个结果,因为它会返回多个结果。

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

  

当DATA_DEF_ID =“ NET_COST”时的DATA_VALUE

互动模型:

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

InteractionData模型:

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

当前,其结果是 DataValueNetCost 具有查询返回的第一个DATA_VALUE记录的值,而复合键所需的5个键中只有4个是这样。

我正在基于Odata调用获取数据,该调用将4个主键发送给Interactions。我需要在视图中的屏幕上显示 InteractionData.DataValueNetCost

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

0 个答案:

没有答案