Как сообщить ядру 5 Entity Framework, что две сущности не связаны?

#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(); }