我想用流利的api定义一个实体关系,如下所示:
modelBuilder.Entity<TableAEntity>()
.HasOne(i => i.TableBEntity)
.WithOne()
.HasForeignKey<TableAEntity>(i => i.IdX ?? i.IdY)...
甚至可能吗?
此代码段:
[Table("tableA")]
class TableAEntity
{
public [Column("idX")] public string IdX { get; set; }
public [Column("idY")] public string IdY { get; set; }
public TableBEntity TableBEntity { get; set; }
}
[Table("tableB")]
class TableBEntity
{
[Key]
public int Id { get; set; }
}
产生错误:
ArgumentException:属性表达式&#39; i =&gt; (i.IdX ?? i.IdY)&#39;无效。
表达式应代表属性访问权限:&#39; t =&gt; t.MyProperty&#39 ;.
指定多个属性时,请使用匿名类型:
&#t; t =&gt; new {t.MyProperty1,t.MyProperty2}&#39;。
参数名称:propertyAccessExpression
编辑: 数据库模型:
Link
谢谢
答案 0 :(得分:2)
是的,这是可能的。
父类必须有一个子项集合...
public class Parent
{
public int ParentId { get; set; }
...
public virtual ICollection<Child> Childs{ get; set; }
}
并且Child类是对父级及其ID的引用(注意,虚拟关键字很重要)
public class Child
{
public int ChildId{ get; set; }
...
public int ParentId { get; set; }
public virtual Parent Parent{ get; set; }
}
流利的就像:
public class ParentChildContext : DbContext
{
public DbSet<Parent> Parents{ get; set; }
public DbSet<Child> Childs{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// configures one-to-many relationship
modelBuilder.Entity<Child>()
.HasRequired<Parent>(c => c.Parent)
.WithMany(p => p.Childs)
.HasForeignKey<int>(c => c.ParentId); }
}
}
我希望它有所帮助,
涓
注意:看看这些链接,可能会帮助你更多:
https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113).aspx
Implementing Zero Or One to Zero Or One relationship in EF Code first by Fluent API