我与Durandal& amp;的asp.net mvc合作微风模板。
我有以下代码优先类:
第一种情况:
public class Transport
{
[Key]
public int Id { get; set; }
...
public int? SenderId { get; set; }
public virtual SendRecv Sender { get; set; }
}
public class SendRecv
{
[Key]
public int Id { get; set; }
...
public virtual List<Transport> Transports { get; set; }
}
然后,我可以轻松地从SendRecv
类型的观察中获取所有相关的传输:
if (sendRecvs()[i].transports().length > 0)
{
...
}
问题:我在我的SendRecv
实体中添加了对同一实体Transport
的新引用,如下所示:
第二种情况:
public class Transport
{
[Key]
public int Id { get; set; }
...
public int? SenderId { get; set; }
public int? ReceiverId { get; set; }
public virtual SendRecv Sender { get; set; }
public virtual SendRecv Receiver { get; set; }
}
然后我再也找不到相关的运输工具了!我的transport
实体中名为SendRecv
的导航属性不再存在。
这不再适用了:
if (sendRecvs()[i].transports().length > 0)
{
...
}
PS:我很确定这在微风迁移到1.4.2之前有效。
有什么想法吗?
感谢。
答案 0 :(得分:0)
我假设您只想在SendRecv中使用一个Transport集合。 如果是这样,试试这个(使用流畅的API):
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<SendRecv>()
.HasMany(c => c.Transports)
.WithRequired(c => c.Sender)
.WillCascadeOnDelete(false);
modelBuilder.Entity<SendRecv>()
.HasMany(c => c.Transports)
.WithRequired(c => c.Receiver)
.WillCascadeOnDelete(false);
}
现在,如果您想要2个传输列表(即Transports1和Transports2),请尝试:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<SendRecv>()
.HasMany(c => c.Transports1)
.WithRequired(c => c.Sender)
.WillCascadeOnDelete(false);
modelBuilder.Entity<SendRecv>()
.HasMany(c => c.Transports2)
.WithRequired(c => c.Receiver)
.WillCascadeOnDelete(false);
}