我有两个表dbo.Foo
和dbo.Bar
。
dbo.Foo
具有两个重要属性:
ID
(主键)OwnerID
(同一表的外键(ID)) dbo.Bar
具有三个重要属性:
ID
(主键)FooID
(dbo.Foo
(ID)的外键)FooOwnerID
(也是dbo.Foo
(ID)的外键)在dbo.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
。
答案 0 :(得分:0)
有人知道怎么做吗?
没有内置。但是您始终可以使用方法或NotMapped属性
例如
public Foo GetFooOwner() => FooOwner??Foo.Owner;