2016-11-20 85 views
0

我想有行對每一個轉移它們是POI 我:與兩個同桌實體框架循環引用需要

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 
} 

不知怎的,我需要對2個接送。其中一個應該屬於第一個賬戶,第二個應該屬於第二個賬戶。擁有第一個帳戶權限但沒有第二個帳戶權限的用戶應該無法看到這兩個條目。這裏

問題是,我不知道如何添加新條目。我嘗試過:

var accounts = Database.Accounts.ToList(); 
Transfer pair, pair2; 
Database.Transfers.Add(
    pair = new Transfer() 
    { 
     ID = Guid.NewGuid(), 
     Ammount = 100, 
     Filter = accounts[0].Filter, 
     Acount = accounts[0], 
    } 
); 

Database.Transfers.Add 
(
    pair2 = new Transfer() 
    { 
     ID = Guid.NewGuid(), 
     Ammount = -100, 
     Filter = accounts[1].Filter, 
     Acount = accounts[1], 
    } 
); 
pair.PairedTransfer = pair2; 
pair2.PairedTransfer = pair; 

Database.SaveChanges(); 

但我越來越循環引用問題。

回答

0

問題是,EF不知道哪個傳輸添加到數據庫第一,因爲1.具有參考2和2有參考1(所以它不能分配外鍵)

我建議插入與空PairedTransfer第一傳送,然後插入第二與分配的第一PairedTransfer,最後分配到第二傳送至第一的PairedTransfer :)

+0

我明白這是什麼問題,我只是不知道如何解決它。 但兩者都需要(不爲空),所以我不知道如何添加一行與空? – Vasoli

+0

哦,現在我看到你用流利的API聲明,PairedTransfer是必需的...所以在這種情況下,你可以使用一些「虛擬」轉移,將有一個空的(只是爲了這個目的)的作用。或者如果可以的話,只是不要按要求說明。 – MacakM

+0

以及如何創建第1個虛擬對象。也許這個對象可以引用它自己?我可以以某種方式說,所有這一切是在1交易?我不想讓數據庫不一致。 – Vasoli

相關問題