Я получил две таблицы, dbo.Foo
и dbo.Bar
.
dbo.Foo
получил два важных свойства:
ID
(первичный ключ) OwnerID
(внешний ключ к той же таблице (ID))
dbo.Bar
получил три важных свойства:
ID
(первичный ключ) FooID
(внешний ключ к dbo.Foo
(ID)) FooOwnerID
(внешний ключ к dbo.Foo
(ID) тоже)
Indbo.Bar
, FooID
ИЛИ FooOwnerID
должен быть установлен.Ниже я создал графику для отображения структуры:

Мой класс модели для 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
.