已更新
我有一个通知表
public class Notification
{
public int SourceType { get; set; }
public int SourceID { get; set; }
....
// Relations
public virtual SourceA A { get; set; }
public virtual SourceB B { get; set; }
}
并且有两个源表
public class SourceA
{
public int Id { get; set; }
...
public virtual Notification {get; set;}
}
public class SourceB
{
public int Id { get; set; }
...
public virtual Notification {get; set;}
}
在模型制作者中
modelBuilder.Entity<SourceA>()
.HasOptional(c => c.Notification)
.WithRequired(x => x.A);
modelBuilder.Entity<SourceB>()
.HasOptional(c => c.Notification)
.WithRequired(x => x.B);
这是我的新查询
var myNotification = db.Notifications.Select(x => new Notification()
{
A= x.A,
B= x.B,
SourceID = x.SourceID,
}).ToList(); //error
我收到此错误The entity or complex type 'Notification' cannot be constructed in a LINQ to Entities query
SourceTypes
为A
和B
。如何根据Source的类型在Notification
中建立实体关系?
我现在根据sourcetypes在每个查询中使用linq join
加入相关的entites。
我正在做数据库优先模型。
答案 0 :(得分:0)
你可以创建关系0..1到很多 在SourceA和SourceB中,您必须添加一个属性以引用Notification Parent
public virtual Notification { get; set; }
然后在您的Entity Framework配置中创建0..1到多个Relation
HasOptional(x => x.SourceA)
.WithRequired(s => s.Notification);
HasOptional(x => x.SourceB)
.WithRequired(s => s.Notification);
查询错误
你不能在一个在数据库中执行的查询中选择一个新的,这只适用于内存集合,以获得SourceID的值,你可以做类似的事情
public int SourceID { get return SourceA = !null ? SourceA.ID : SourceB.ID; }