У меня есть таблица ( Interaction_Data ) с составным ключом, состоящим из 5 полей данных. Четыре из этих ключей предоставляются в качестве внешнего ключа другим классом ( Взаимодействия ). Это дает мне проблему с отсутствующим ключом в моей таблице Interaction_Data , поэтому мое поле данных всегда возвращает первый результат, так как оно возвращает несколько результатов.
В моей модели InteractionData я пытаюсь вызвать SQL-запрос в моем геттере (см. « DataValueNetCost » ниже). Я хочу, чтобы мой метод получения возвращал определенное значение на основе ввода из другого поля в моей таблице. А именно, я хочу получить:
DATA_VALUE, когда DATA_DEF_ID = "NET_COST"
Модель взаимодействий:
[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, возвращенной из запроса, и для составного ключа требуется только 4 из 5 ключей.
Я получаю данные на основе вызова Odata, который отправляет 4 первичных ключа в Interactions. Мне нужно отобразить InteractionData.DataValueNetCost на экране в моем представлении.
Как я могу вернуть DATA_VALUE, когда DATA_DEF_ID = "NET_COST" в текстовое поле моего просмотра?