Entity Framework 6 Entity Modeling - PullRequest
       8

Entity Framework 6 Entity Modeling

0 голосов
/ 14 мая 2018

У меня есть таблица, которую я назову Batch, и у нее есть схема, которая выглядит примерно так:

BatchId | Created Date | CreatedBy | EngineTypeId
----------------------------------------------------
1       | 2018-05-11   | dbo       |  1

Столбец EngineTypeId привязан к другой таблице, которая называется BatchEngineSubType и имеет такую ​​схему:

BatchEngineSubTypeId | EngineSubType | Description
---------------------|---------------|------------
1                    | TestEngine    | Dummy text

Обычно я могу получить доступ к данным в моей таблице через веб-страницу с использованием стандартного MVC.Тем не менее, моя проблема с вышесказанным заключается в том, что мне нужен мой окончательный вывод на экран, чтобы он выглядел так:

 BatchId | Created Date | CreatedBy | EngineSubType
 ----------------------------------------------------
 1       | 2018-05-11   | dbo       |  TestEngine

Сначала я создал представление, которое извлекло из моей таблицы Batch и соединилось на BatchEngineSubType таблица, чтобы получить желаемый прогноз.Но, делая это таким образом, я не могу позволить пользователям фактически изменять данные и обновлять соответствующие таблицы.

Я немного погуглил и нашел учебник по fluent api , чтобы я мог делать все, что мне нужно, все в C # вместо SQL.

Следуя инструкции, я создал новую модель под названием BatchEngine, которая имеет следующее:

public class BatchEngine : IObjectWithState
{
    [Key]
    public int BatchEngineSubTypeId { get; set; }

    public string EngineType { get; set; }
    public string Desciption { get; set; }

    public State State { get; set; }
}

В моей модели Batch я внес некоторые изменения, чтобы использовать новую модель, чтобыfluent API подберет его:

public class Batch_Adjustment : IObjectWithState
{
    [Key]
    public int BatchId { get; set; }

    public DateTime CreatedDate { get; set; }
    public string CreatedBy { get; set; }
    public int BatchEngineTypeId { get; set; }

    [ForeignKey("BatchEngine")]
    public string Engine { get; set; }

    public virtual BatchEngine BatchEngine { get; set; }
}

Последний шаг, в моем OnModelCreating методе, я пытаюсь связать их вместе следующим образом:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Types<IObjectWithState>().Configure(c => c.Ignore(p => p.State));
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    modelBuilder.HasDefaultSchema("dbo"); 

    modelBuilder.Entity<BatchEngine>()
        .HasMany(b => b.Desciption).WithMany(i => i.)
        .Map(t => t.MapLeftKey()
             .MapRightKey()
             .ToTable("vwBatchRetention"));


    modelBuilder.Entity<Batch>().ToTable("Batch").HasKey(e => e.BatchId);

}

Это впоследний шаг, который у меня проблемы с окончанием.Я правильно настроил это?Как вы увидите в части, которая имеет. WithMany часть в скобках не завершена.Это потому, что когда я ввожу ., ничего не появляется.

Что я сделал не так?

1 Ответ

0 голосов
/ 14 мая 2018

При работе с Code First, если вы не соблюдаете соглашения при определении ваших классов или хотите изменить способ работы соглашений, вы можете использовать свободный API или аннотации данных для настройки ваших классов, чтобы Code First могла сопоставьте отношения между вашими таблицами.

HasMany - это один из свободно распространяемых API-методов для определения отношений между сущностями. С его помощью можно использовать только свойства навигации, чтобы определить тип отношений между этими объектами, то есть один-к-одному, один-ко-многим и т. Д. В учебнике, который вы читаете, он показывает отношения между курсом и инструктором.

Здесь вы пытаетесь использовать строковое свойство "Description" с методом "HasMany", который ожидает свойство навигации. Вы можете найти больше информации в Свободный API Entity Framework - Отношения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...