Entity Framework MVC, как я могу использовать внутреннее соединение? - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь разработать проект с DevExpress mvc. Я использовал Entity Framework для подключения к базе данных. То, что я хочу сделать, это объединить две таблицы с companyId в таблице c и с guId в таблице k

что я хочу сделать; https://ekitapdfindir.com/istek.png

мой индекс просмотра;

@(Html.DevExtreme().DataGrid<plate_logs>()
        .ShowBorders(true)
        .DataSource(d => d.WebApi().Controller("PlateLogs").Key("Guid"))
        .Columns(columns =>
        {
            columns.AddFor(m => m.Guid).Width(100);
            columns.AddFor(m => m.LastUpdateDate).Width(90);
            // Columns Location ID
            columns.AddFor(m => m.LocationId)
                .Lookup(lookup =>
                    lookup
                    .DataSource(d => d.WebApi()
                        .Controller("Locations")
                        .LoadAction("Get")
                        .Key("adsad"))
                    .DisplayExpr("Name")
                    .ValueExpr("Guid"));
            // Columns Gate ID
            columns.AddFor(m=>m.GateId)
                .Lookup(lookup => lookup
                    .DataSource(d => d.WebApi()
                        .Controller("Gates")
                        .LoadAction("Get")
                        .Key("GateId"))
                    .DisplayExpr("Name")
                    .ValueExpr("Guid"));
            // Columns Departmant ID
            columns.AddFor(m => m.DepartmentId)
               .Lookup(lookup => lookup
                   .DataSource(d => d.WebApi()
                       .Controller("Departments")
                       .LoadAction("Get")
                       .Key("DepartmentId"))
                   .DisplayExpr("Name")
                   .ValueExpr("Guid"));
            // Columns Driver ID 
            columns.AddFor(m => m.DriverId)
               .Lookup(lookup => lookup
                   .DataSource(d => d.WebApi()
                       .Controller("Driver")
                       .LoadAction("Get")
                       .Key("DriverId"))
                   .DisplayExpr("FullName")
                   .ValueExpr("Guid"));

            // Columns Company ID    
            columns.AddFor(m => m.DriverId)
               .Lookup(lookup => lookup
                   .DataSource(d => d.WebApi()
                       .Controller("Driver")
                       .LoadAction("Gets"))
                   .DisplayExpr("Name")
                   .ValueExpr("Guid"));

        })
        .Paging(p => p.PageSize(20))            
    )
)

мой драйвер контроллера;

        LCWCENTEREntities db = new LCWCENTEREntities();
        [HttpGet]
        public HttpResponseMessage Get(DataSourceLoadOptions loadOptions)
        {
            var model = db.driver.ToList();
            return Request.CreateResponse(DataSourceLoader.Load(model, loadOptions));
        }
        [HttpGet]
        public HttpResponseMessage Gets(DataSourceLoadOptions loadOptions)
        {
            var sorgu = from d in db.driver
                        join c in db.company
                        on d.CompanyId equals c.Guid
                        select  new {d,c };
            return Request.CreateResponse(DataSourceLoader.Load(sorgu, loadOptions));
        }

Действия get соединяет таблицу драйверов с таблицей компании и отправляет данные в средство просмотра

Редактировать

моя таблица plate_log;

    public partial class plate_logs
    {
        public int Id { get; set; }
        public long Guid { get; set; }
        public string Plate { get; set; }
        public Nullable<long> DriverId { get; set; }
        public Nullable<System.DateTime> LastUpdateDate { get; set; }
        public Nullable<byte> isRemoved { get; set; }
    }

таблица драйверов;

    public partial class driver
    {
        public int Id { get; set; }
        public long Guid { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string FullName { get; set; }
        public Nullable<long> CompanyId { get; set; }
        public Nullable<byte> isRemoved { get; set; }
    }

и фирменный стол;

    public partial class company
    {
        public short Id { get; set; }
        public long Guid { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
        public string PhoneNumber { get; set; }
        public Nullable<short> isSync { get; set; }
        public Nullable<System.DateTime> LastUpdateDate { get; set; }
        public Nullable<byte> isRemoved { get; set; }
    }

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Я нашел решение. Редактор контроллера драйвера;

public HttpResponseMessage Gets(DataSourceLoadOptions loadOptions)
        {
            var sorgu = (from c in db.company
                        join d in db.driver
                        on c.Guid equals d.CompanyId
                        orderby c.Guid descending
                        select new { Guid= d.Guid, Name=c.Name, });
            return Request.CreateResponse(DataSourceLoader.Load(sorgu.ToList(), loadOptions));
        }
0 голосов
/ 06 сентября 2018

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

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

Так что пример будет выглядеть так:

Модель

public class A 
{
       public int PropertyA {get; set;}

       public B B {get; set;}
}

public class B 
{
       public int PropertyB {get; set;}

       public A A {get; set;}
}

В контроллере вам нужно вызвать метод LINQ с помощью Include (), например,

Контроллер

context_variable.A.Include(x => x.B).ToList();

Надеюсь, это вам поможет и достаточно объяснительно.

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