0

我使用带有 Durandal 和微风模板的 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; }
}

然后我可以轻松地从我的 observable 类型中获取所有相关的传输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 之前有效

任何的想法?

谢谢。

4

1 回答 1

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);
}
于 2013-09-17T21:12:59.230 回答