Я имею дело с небольшим кошмаром в данный момент.Мне приходится сначала заниматься разработкой базы данных, где я не могу изменить базу данных (слишком много других приложений полагаются на базу данных).Основная идея заключается в том, что у меня есть две таблицы, которые связаны между собой, но у меня нет фактического отношения FK в SQL.
Я сразу перейду и покажу вам несколько таблиц:
tblConnectorTypes:
ConnectID (primary key, Int16)
ConnectorType (String)
tblEquipmentPorts:
EquipPortID (primary key, Int32)
ConnectorType (Byte)
...other columns left out for brevity...
Это грубая схема того, как выглядят таблицы (с указанием типов SQL в скобках).tblEquipmentPorts.ConnectorType сопоставляется с tblConnectorTypes.ConnectID - безобразно, верно?Тьфу.
Как видите, не только имена столбцов не совпадают, но и типы столбцов разные.Я пытался найти какую-либо форму DataAnnotation, которую я мог бы использовать, чтобы сделать эту работу, но я думаю, что различные типы столбцов могут быть убийцей сделки.Вот пример двух POCO, которые я создал для представления таблиц выше:
[Table("tblEquipmentPorts")]
public class EquipmentPort {
[Key]
public int EquipPortID { get; set; }
[Column("ConnectorType")]
public byte ConnectorTypeID { get; set; }
[ForeignKey("ConnectorTypeID")]
public virtual ConnectorType ConnectorType { get; set; }
// ...other columns left out for brevity...
}
[Table("tblConnectorTypes")]
public class ConnectorType {
[Key]
[Column("ConnectID")]
public Int16 ConnectorTypeID { get; set; }
[Column("ConnectorType")]
public string Name { get; set; }
}
Как вы можете видеть, я пытался очистить имена столбцов с помощью DataAnnotation, но я не уверенесли я могу затем создать аннотации внешнего ключа, используя аннотированные имена.Однако сборка и запуск выдают следующую ошибку о несоответствиях разных типов:
One or more validation errors were detected during model generation:
System.Data.Edm.EdmAssociationConstraint: : The types of all properties in
the Dependent Role of a referential constraint must be the same as the
corresponding property types in the Principal Role. The type of property
'ConnectorTypeID' on entity 'EquipmentPort' does not match the type of
property 'ConnectorTypeID' on entity 'ConnectorType' in the referential
constraint 'EquipmentPort_ConnectorType'.
Возможно ли принудительное преобразование типов столбцов, чтобы я мог создать эту связь?
Хотелось бы изменить саму базу данных, но, как я упоминал выше, в компании слишком много других приложений, которые используют эту базу данных как есть (которую я не могу обновить).Радости работы на предприятии, верно?
Спасибо за чтение!