迁移微风1.4.2后,导航属性不再起作用

时间:2013-09-17 10:26:28

标签: breeze durandal

我与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之前有效。

有什么想法吗?

感谢。

1 个答案:

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