Модель сущности и привязка метки к несвязанной таблице - PullRequest
0 голосов
/ 25 июня 2009

Я пытаюсь найти лучший способ привязки к несвязанной таблице в .Net. У меня есть модель данных ADO .Net Entity, которая содержит несколько связанных таблиц и несколько несвязанных таблиц.

Например, у меня есть следующие таблицы: KEY_VALUE_LKP со столбцами LKP_TEXT, LKP_VALUE и LKP_TYPE REQUEST_DET со столбцами REQUESTNO, USERID и REQ_STATUS USER_DET со столбцами USERNAME, USERID

REQUEST_DET связано с KEY_VALUE_LKP, где REQ_STATUS = LKP_VALUE и LKP_TYPE = "REQUEST_CRITICALITY", но это отношение не определено в базе данных REQUEST_DET имеет отношение внешнего ключа с USER_DET, определенным в базе данных, где USERID = USERID

Когда я строю свою модель, я получаю три таблицы и тот факт, что USER_DET связан с REQUEST_DET

Используя FORMVIEW, я связываюсь с данными запроса (REQUEST_DET EntityDataSource) и вижу соответствующую информацию для запроса связанных таблиц (USERNAME, REQUESTNO, но получаю числовое значение для REQ_STATUS.

Я хотел бы получить значение LKP_TEXT, но, видя, что между таблицей KEY_VALUE_LKP не определена связь, атрибут «Включить» в EntityDataSource не будет работать.

Я добавил второй объект EntityDataSource в WebForm, связал его с таблицей KEY_VALUE_LKP и добавил where Where = "it.LKP_TYPE = 'REQUEST_CRITICALITY'". Я знаю, что могу связать это с DropDown и в коде установить установленное значение, но я хочу, чтобы это было связано с меткой, а не с раскрывающимся списком.

Итак, из представления формы, привязанного к REQUEST_DET, EntityDataSource можно связать метку с другим EntityDataSource?

Заранее спасибо, -J

1 Ответ

0 голосов
/ 01 июля 2009

Я нашел способ сделать это с помощью Entity SQL, ниже приведен похожий пример:

string eSql = @"SELECT VALUE LKP FROM
Key_Value_LKP as LKP where
LKP.LKP_TYPE='REQUEST_CRITICALITY' and LKP.LkpValue=@lkpValue";

ObjectQuery<Key_Value_LKP> statusQuery = ctx.CreateQuery<Key_Value_LKP>(eSql);
ObjectParameter lkpValue = new ObjectParameter("lkpValue",lkpValue.ToString());
statusQuery.Parameters.Add(lkpValue);

string REQ_STATUS= statusQuery.First().LkpText;

Label lState = (Label)fvRun.Row.FindControl("REQ_STATUSLabel");

//set state to exisitng run state
lState.Text = REQ_STATUS;
...