0
を必要と私が持っている:Entity Frameworkの循環参照の両方で同じテーブルで私は ポイあるすべての転送のために行のペアを持ちたい
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つの送迎をペアリングする必要があります。そのうちの1つは第1のアカウントに属し、第2のアカウントは第2のアカウントに属している必要があります。最初にアカウントを作成する権限を持っているが、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();
しかし、私は循環参考問題になっています。
私は問題を理解しています。 どちらも必須です(nullでない)ので、nullで1行追加する方法はわかりません。 – Vasoli
ああ、私は流暢なAPIを使ってPairedTransferが必須であることを知っています。その場合、nullの役割を持ついくつかの "ダミー"転送を使うことができます。または可能であれば、必要に応じてそれを述べないでください。 – MacakM
第1ダミーオブジェクトの作成方法。おそらくそのオブジェクト自体を参照することができますか?どういうわけか、そのすべてが1回の取引であると言えますか?私はdbに一貫性を持たせたくありません。 – Vasoli