Пользовательские запросы в MVC 4 / Структура Предприятия?

У меня в настоящее время есть рабочее Приложение типа CRUD, построенное, используя ASP.net MVC 4 и Структуру Предприятия. Я использую модель EDMX для столов, которые развернуты в базе данных по живому серверу.

Я хочу знать, как подвергнуть сомнению столы в моих диспетчерах, чтобы возвратить представление, которое содержит колонки от каждого стола (соединение), как один стол, на основе заголовка столбца, возвращенного из строки запроса

Это мои столы, у меня есть получатели и сеттеры для них в их соответствующих моделях и модель - "Model1.edmx"

AccCompany                             AccControl
    ID                                     ID
    Code                                   ControlCode
    CompanyID                              Nominal
    AccountsCompany                        CostCentre
    Company                                Department

Я просто не понимаю, как присоединиться к столам, используя пользовательские методы как структура MVC. EF, казалось, сделал все само - с точки зрения фактического вопроса...

1
Который является связывающейся колонкой между вашими двумя столами?
добавлено автор PGallagher, источник
Который является связывающейся колонкой между вашими двумя столами?
добавлено автор PGallagher, источник
Кодекс к ControlCode
добавлено автор user2046422, источник
Кодекс к ControlCode
добавлено автор user2046422, источник

6 ответы

Если я понимаю ваш вопрос правильно, это - то, в чем вы нуждаетесь

var views = from company in context.AccCompany
            join control in context.AccControl 
              on company.Code equals control.ControlCode
            where company.Code == Request.QueryString["Code"]
            select new JoinedView 
            { 
                CompanyId: company.CompanyID, 
                Code: company.Code,
                ControlId: controlId, 
                Nominal: control.Nominal
               //any other columns you need
            }

где JoinedView - класс, содержащий колонки от обоих предприятий.

2
добавлено
Уверенный. Если это - то, в чем вы нуждаетесь.
добавлено автор Vasil Trifonov, источник
Был бы я тогда просто возвратить Представление (взгляды);?
добавлено автор user2046422, источник

Если я понимаю ваш вопрос правильно, это - то, в чем вы нуждаетесь

var views = from company in context.AccCompany
            join control in context.AccControl 
              on company.Code equals control.ControlCode
            where company.Code == Request.QueryString["Code"]
            select new JoinedView 
            { 
                CompanyId: company.CompanyID, 
                Code: company.Code,
                ControlId: controlId, 
                Nominal: control.Nominal
               //any other columns you need
            }

где JoinedView - класс, содержащий колонки от обоих предприятий.

2
добавлено
Уверенный. Если это - то, в чем вы нуждаетесь.
добавлено автор Vasil Trifonov, источник
Был бы я тогда просто возвратить Представление (взгляды);?
добавлено автор user2046422, источник

Есть два подхода, которые я люблю.

Первое прямое, используя методы навигации от структуры предприятия:

Диспетчер:

public ActionResult Details(short id = 0)
{
    AccCompany accComp = db.AccCompany.Find(id);
    if (accComp == null)
    {
        return HttpNotFound();
    }
    return View(accComp);
}

Посмотреть:

@model Some.Entities.AccCompany

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.Company)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.Company)
</div>

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.AccControl.CostCentre)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.AccControl.CostCentre)
</div>

Второй включает создание таможенной "Модели Представления" для определенного представления и использования что как ваша модель в представлении, лучше для проверок imo:

SomeViewModel.cs:

public class SomeViewModel
{
    [Required]
    public string Company { get; set; }

    [Required]
    [Display(Name = "Cost Centre")]
    public string CostCentre { get; set; }
}

Then populate that in your Диспетчер:

public ActionResult Details(short id = 0)
{
    AccCompany accComp = db.AccCompany.Find(id);

if (accComp == null)
    {
        return HttpNotFound();
    }

SomeViewModel vm = new SomeViewModel();

vm.Company = accComp.Comany;
vm.CostCentre = accComp.AccControl.CostCentre;

    return View(vm);
}

Then the Посмотреть:

@model Some.SomeViewModel

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.Company)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.Company)
</div>

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.CostCentre)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.CostCentre)
</div>

Надежда это помогает

1
добавлено
Нет проблем. Я рекомендую читать на структуре предприятия и отношениях. Это определенно поможет вам в конечном счете: D
добавлено автор joumasehare, источник
1) Удостоверьтесь, что у вашей модели представления есть те же самые типы данных как классы, произведенные для вас EF. Или просто ToString 2), Кажется, что нет никакой связи между AccCompany и AccControl. Гарантируйте, что внешние ключи - установка правильно в SQL-сервере И вашем edmx. Как работа вокруг, вы могли сделать что-то как: vm. CostCentre = db. AccControls. Где (c => c. ControlCode == accComp. Кодекс).FirstOrDefault ().CostCentre;
добавлено автор joumasehare, источник
Да я сделаю!:)
добавлено автор user2046422, источник
Спасибо! That' s сделанный это
добавлено автор user2046422, источник
I' m получение ошибок со вторым подходом vm. Компания = accComp. Компания не Может неявно преобразовать интервал типа, чтобы натянуть vm. CostCentre = accComp. AccControl. CostCentre; не содержит определение для AccControl
добавлено автор user2046422, источник

Есть два подхода, которые я люблю.

Первое прямое, используя методы навигации от структуры предприятия:

Диспетчер:

public ActionResult Details(short id = 0)
{
    AccCompany accComp = db.AccCompany.Find(id);
    if (accComp == null)
    {
        return HttpNotFound();
    }
    return View(accComp);
}

Посмотреть:

@model Some.Entities.AccCompany

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.Company)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.Company)
</div>

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.AccControl.CostCentre)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.AccControl.CostCentre)
</div>

Второй включает создание таможенной "Модели Представления" для определенного представления и использования что как ваша модель в представлении, лучше для проверок imo:

SomeViewModel.cs:

public class SomeViewModel
{
    [Required]
    public string Company { get; set; }

    [Required]
    [Display(Name = "Cost Centre")]
    public string CostCentre { get; set; }
}

Then populate that in your Диспетчер:

public ActionResult Details(short id = 0)
{
    AccCompany accComp = db.AccCompany.Find(id);

if (accComp == null)
    {
        return HttpNotFound();
    }

SomeViewModel vm = new SomeViewModel();

vm.Company = accComp.Comany;
vm.CostCentre = accComp.AccControl.CostCentre;

    return View(vm);
}

Then the Посмотреть:

@model Some.SomeViewModel

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.Company)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.Company)
</div>

<div class="displayLabel">
     @Html.DisplayNameFor(model => model.CostCentre)
</div>
<div class="displayField">
    @Html.DisplayFor(model => model.CostCentre)
</div>

Надежда это помогает

1
добавлено
Нет проблем. Я рекомендую читать на структуре предприятия и отношениях. Это определенно поможет вам в конечном счете: D
добавлено автор joumasehare, источник
1) Удостоверьтесь, что у вашей модели представления есть те же самые типы данных как классы, произведенные для вас EF. Или просто ToString 2), Кажется, что нет никакой связи между AccCompany и AccControl. Гарантируйте, что внешние ключи - установка правильно в SQL-сервере И вашем edmx. Как работа вокруг, вы могли сделать что-то как: vm. CostCentre = db. AccControls. Где (c => c. ControlCode == accComp. Кодекс).FirstOrDefault ().CostCentre;
добавлено автор joumasehare, источник
Да я сделаю!:)
добавлено автор user2046422, источник
Спасибо! That' s сделанный это
добавлено автор user2046422, источник
I' m получение ошибок со вторым подходом vm. Компания = accComp. Компания не Может неявно преобразовать интервал типа, чтобы натянуть vm. CostCentre = accComp. AccControl. CostCentre; не содержит определение для AccControl
добавлено автор user2046422, источник

если вы знаете Linq, вы не должны писать больше кода для пользовательских запросов.

public ApiEntities Content = new ApiEntities();
public IQueryable GetCustomQuery(System.Linq.Expressions.Expression> where) where T : EntityObject
{
   return Content.CreateObjectSet().Where(where);
}

использование

var R = new Repo();
//Single query
R.GetCustomQuery(x => x.Code == Request.QueryString["Code"]).FirstOrDefault();
//list query
R.GetCustomQuery(x => x.Code == Request.QueryString["Code"]).ToList();
0
добавлено

если вы знаете Linq, вы не должны писать больше кода для пользовательских запросов.

public ApiEntities Content = new ApiEntities();
public IQueryable GetCustomQuery(System.Linq.Expressions.Expression> where) where T : EntityObject
{
   return Content.CreateObjectSet().Where(where);
}

использование

var R = new Repo();
//Single query
R.GetCustomQuery(x => x.Code == Request.QueryString["Code"]).FirstOrDefault();
//list query
R.GetCustomQuery(x => x.Code == Request.QueryString["Code"]).ToList();
0
добавлено
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)