C # Entity Framework с Linq.Dynamic: ЗАКАЗАТЬ COALESCE - PullRequest
0 голосов
/ 13 декабря 2018

Я получил две таблицы, dbo.Foo и dbo.Bar.

dbo.Foo получил два важных свойства:

  • ID (первичный ключ)
  • OwnerID (внешний ключ к той же таблице (ID))

dbo.Bar получил три важных свойства:

  • ID (первичный ключ)
  • FooID (внешний ключ к dbo.Foo (ID))
  • FooOwnerID (внешний ключ к dbo.Foo (ID) тоже)

Indbo.Bar, FooID ИЛИ FooOwnerID должен быть установлен.Ниже я создал графику для отображения структуры:

Data modell

Мой класс модели для dbo.Bar выглядит следующим образом:

public class Bar
{
    public int ID { get; set; }
    public int FooID { get; set; }
    public int FooOwnerID { get; set; }

    public virtual Foo Foo { get; set; }
    public virtual Foo FooOwner { get; set; }
}

Отображение для таблицы (с использованием Fluent-API) выглядит следующим образом:

modelBuilder.Entity<Bar>().ToTable("Bar", "dbo");
modelBuilder.Entity<Bar>().HasKey(x => x.ID);
modelBuilder.Entity<Bar>().Property(x => x.FooID).IsRequired();
modelBuilder.Entity<Bar>().Property(x => x.FooOwnerID).IsRequired();
modelBuilder.Entity<Bar>().HasOptional(x => x.Foo).WithMany().HasForeignKey(x => x.FooID);
modelBuilder.Entity<Bar>().HasOptional(x => x.FooOwner).WithMany().HasForeignKey(x => x.FooOwnerID);

Это работает.Но я хочу, чтобы FooOwner был фактическим владельцем Foo вместо null, если установлен только FooID.У кого-нибудь есть идеи, как это сделать?

Фон

Я использую DataTables для отображения данных в представлении.Чтобы упорядочить элементы, DataTables отправляет имя столбца в заказ (например, Foo.ID).Я использую Linq.Dynamic, чтобы упорядочить набор результатов динамически.Строка заказа выглядит следующим образом: Foo.ID asc, PropertyOfBar desc.

1 Ответ

0 голосов
/ 13 декабря 2018

У кого-нибудь есть идеи, как это сделать?

Ничего встроенного.Но вы всегда можете использовать метод или свойство NotMapped

например

public Foo GetFooOwner() => FooOwner??Foo.Owner;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...