实体框架关系基于导航属性值



我想定义与流利API的实体关系:

SELECT * 
FROM tableA a
JOIN tableB b on a.itemId = ISNULL(b.idX, b.idY)

甚至可能吗?

此代码段:

modelBuilder.Entity<TableAEntity>()
            .HasOne(i => i.TableBEntity)
            .WithOne()
            .HasForeignKey<TableAEntity>(i => i.IdX ?? i.IdY)...

产生错误:

gright exception:属性表达式'i =>(i.idx ?? i.idy)'无效。
表达式应表示属性访问:'t => t.myproperty'。
指定多个属性时,请使用匿名类型:
't => new {t.myproperty1,t.myproperty2}'。
参数名称:PropertyAccessExpression

编辑:DB模型:

[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; }
}

谢谢

是的,这是可能的。

父班必须有一个子项目的集合...

public class Parent
{
    public int ParentId { get; set; }
    ...
    public virtual ICollection<Child> Childs{ get; set; }
}

和儿童类A类引用对父母及其ID(注意,虚拟关键字很重要)

public class Child
{
    public int ChildId{ get; set; }
    ...
    public int ParentId { get; set; }
    public virtual Parent Parent{ get; set; }
}

fluent就像:

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);          }
    }
}

我希望它有帮助,

胡安

注意:查看这些链接,可能会帮助您更多:

http://www.entityframeworkturorial.net/code-first/configure-one-one-to-many-relationshiphiphip-in-code-first.aspx

https://msdn.microsoft.com/en-us/library/jj591620(v = vs.113).aspx

首先通过fluent api

在EF代码中实现零或一个与零的关系

相关内容

  • 没有找到相关文章

最新更新