我想定义与流利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