#c# #entity-framework-core #entity-relationship #.net-5 #invalidoperationexception
Вопрос:
Я использую подход code first и у меня есть две сущности, которые не связаны
[table("state")]
public class StateCodeDTO {
[Key]
[column("state_code")
string StateCode { get; set; }
[column("state_name")]
string StateName { get; set; }
}
[table("location")]
public class LocationDTO {
[Key]
[column("id")
int Id { get; set; }
[column("location_name")]
string Location_Name { get; set; }
}
Возможно, я создал запрос, в котором ошибочно включил обе сущности. Я не помню точно, что я сделал, но это была ошибка. Теперь я застрял
на Entity Framework
мысли, что между этими двумя таблицами существует связь. В моем контексте у меня есть следующие наборы баз данных:
public DbSet<LocationDTO> LocationInformation { get; set; }
public DbSet<StateCodeDTO> StateCode { get; set; }
Если я сделаю следующий звонок:
var stateDTOs = _dbContext.StateCode.ToList();
У меня есть ужасное Invalid column name
исключение
Исключение SQLException: Недопустимое имя столбца «LocationDTOId».
Microsoft.Данные.SqlClient.SqlConnection.Ошибка(исключение SQLException, разрыв соединения bool, Действие wrapCloseInAction) Microsoft.Data.SqlClient.SqlInternalСоединение.Ошибка(исключение SQLException, разрыв соединения bool, Действие wrapCloseInAction) Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, bool callerHasConnectionLock, bool asyncClose) Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, поток данных SqlDataReader, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, данные из bool готовы)
Обратите внимание, что все работало нормально, пока я не сделал тот неверный запрос, который, казалось, привел все в штопор. Я не думаю, что это имеет отношение к тому, что я сделал, мне просто нужен способ сказать Entity Framework
, что эти две сущности не связаны. Похоже, что он применяет Code First
условный ClassNameKey к таблице местоположений и думает, что LocationDTOId
это внешний ключ в таблице состояний. Это не могло быть дальше от истины.
How can I tell Entity Framework that these entities are unrelated?
Комментарии:
1. я предполагаю, что ef проверяет свою модель, а не то, что они связаны.
2. Есть ли способ обойти это?
3. Можете ли вы показать свой api dbcontext fluent?
4. «Как я могу сообщить Entity Framework, что эти сущности не связаны?» — Найдя и исправив место, где вы на самом деле говорите EF, что они связаны. С тем, что вы показали, это никак не может произойти. Также это не могло произойти при создании запроса. Тем не менее, некоторый вызов конфигурации fluent внутри
OnModelCreating
илиLocationDTO
класс , имеющий свойство навигации по коллекции (IEnumerable
ICollection
,List
и т.д.)StateCodeDTO
, Может легко ввести такую связь.5. Это очень просто и не содержит связанной информации, защищенной переопределением void при создании модели(ModelBuilder ModelBuilder) { ModelBuilder. Сущность<CustomerContactDTO>().HasNoKey(); }