实体框架循环引用在同一个表中都有必需的

时间:2016-11-20 15:03:06

标签: c# entity-framework ef-code-first code-first one-to-one

我希望每次转移都有一对poi 我有:

.finally(callback, notifyCallback)

不知怎的,我需要配对2转会。其中一个应属于第一个帐户,第二个应属于第二个帐户。拥有第一个帐户权限但没有第二个帐户权限的用户不应该看到这两个条目。

这里的问题是我不知道如何添加新条目。我试过了:

public class Transfer :  DependentRestrictedEntity 
{
    public virtual Account Acount { set; get; }
    public DateTime Time { set; get; }  
    public Transfer PairedTransfer { set; get; }
    [NotMapped]
    public override RestrictedEntity DependentOn => Acount;
    //other code.
}

public class Account : RestrictedEntity
{        
    public string Name { get; set; }
    //other code.
}

 public class RestrictedEntity : Entity
{
    public Filter Filter { get; set; }
    //other code.
}

public abstract class DependentRestrictedEntity : RestrictedEntity
{
    [NotMapped]
    public abstract RestrictedEntity DependentOn { get; } 
    //other code.
}

 public class Entity
{
    [Key, JsonProperty, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ID { set; get; }
    //other code.
}

 public class MyMoneyContext : UserDbContext
{
    public DbSet<Account> Accounts { get; set; }
    public DbSet<Transfer> Transfers { get; set; }

    protected override void OnModelCreating(DbModelBuilder _modelBuilder)
    {
        base.OnModelCreating(_modelBuilder);


        _modelBuilder.Entity<Transfer>()
           .HasRequired(_t => _t.PairedTransfer)
           .WithRequiredDependent();
    }
    //other code
}

但我得到循环参考问题。

1 个答案:

答案 0 :(得分:0)

问题是EF不知道哪个Transfer首先添加到DB,因为1.引用2.和2.引用1.(因此它不能分配外键)

我建议使用null PairedTransfer插入第一次传输,然后使用指定的第一个PairedTransfer插入第二次传输,然后最后分配给第一次传输到第一个PairedTransfer:)