Если у вас есть существующая схема базы данных, первым делом, чтобы избежать мягких исключений, является отключение создания / переноса схемы в EF.По умолчанию, когда EF подключается к базе данных и переходит к разрешению схемы, если он сталкивается с таблицей, которую не может разрешить, он создает ее.Ключ, который я вижу, может быть в этом случае, когда вы говорите, что таблица называется [ERP] .PartTran.Я подозреваю, что вы можете обнаружить, что в вашей базе данных есть новая пустая таблица с именем [dbo] .Tran.(при условии, что SQL Server)
Чтобы отключить создание схемы: В конструкторе контекста Db
public EpiDB()
{
Database.SetInitializer<EpiDB>(null);
}
Это может в значительной степени идентифицировать любые неверные предположения схемы, которые EF делает по соглашению.Джим ответил бы так, как я полагаю, что ваша проблема будет лежать.
Сущности должны отображаться относительно близко, если не идентично вашей таблице.Переименование сущности или свойств, отличающихся от таблицы, для пояснения их в коде - это хорошо, но вы должны быть уверены, что при этом вы дадите EF достаточно информации о вашей схеме, чтобы она могла правильно разрешить таблицу.Если ваша таблица называется «PartTran», а ваш экземпляр DbSet называется «PartTran», почему вы хотите назвать сущность «Tran», а не «PartTran»?
Если схема вашего приложения - «ERP», тогдавы можете избежать необходимости указывать имя схемы для каждой сущности, добавив следующее к вашему DbContext.OnModelCreating ():
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema("ERP");
// ...
}
В противном случае, если вы используете несколько схем, вам необходимо явно отобразить схемудля использования с атрибутом [Table]
или ToTable("{tableName}", "{SchemaName}")
в конфигурации EntityTypeConfig / modelBuilder.
Далее убедитесь, что поля вашего объекта соответствуют соответствующим полям в таблице.Вам не нужно отображать каждое поле, если оно вам не нужно, но как минимум вам необходимо сопоставить Первичный ключ.По предположению сущности PartTran, я предполагаю, что вы либо пропускаете что-то вроде столбца PartTranId, либо PK представляет собой составной ключ, использующий столбцы PartNum и TranNum.Если у вас есть PartTranId или похожий PK, добавьте его к объекту вместе с атрибутом [Key].Если PK является составным:
public class PartTran
{
[Key, Column(Order = 1)]
public int TranNum { get; set; }
public string TranReference { get; set; }
[Key, Column(Order = 2)]
public string PartNum { get; set; }
}
Это должно дать вам несколько идей для сравнения с вашей кодовой базой ... Чтобы пойти дальше, это поможет изменить ваш вопрос, включив в него соответствующие таблицы и любые другие.сущности, которые вы пытались создать до сих пор.Что-то вроде «PartTran» выглядит как объединяющая таблица для отношения «многие ко многим» между таблицей «Part» и таблицей «Tran» (saction?).Если это так, есть несколько вариантов, как вы можете эффективно подключить это в EF, чтобы вывести данные так, как вы хотите.