我正在嘗試使用SQL Server在ef-core中建立支付模型。一筆付款有一個從方和一個到方,在這種情況下,每個人都有一個用戶或行為者。 我有一個交易類,它與一個FromActor和一個ToActor有關系。 生成的遷移不能在資料庫中更新,說可能有多個級聯路徑。 我讀到我需要在資料庫背景關系的OnModelCreating方法中覆寫默認的級聯,但我不確定如何做。 我對EF和遷移相當陌生,我只是按照https://docs.microsoft.com/en-us/ef/core/get-started/overview/first-app?tabs=visual-studio。
public class Actor
{
public int ActorId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Transaction> Transactions = new List< Transaction>()。
}
public class Transactionpublic int TransactionId { get; set; }
public DateTime TimestampUtc { get; set; }
public decimal Amount { get; set; }
public int FromActorId { get; set; }
public Actor FromActor { get; set; }
public int ToActorId { get; set; }
public Actor ToActor { get; set; }
在表'Transactions'上引入FOREIGN KEY約束'FK_Transactions_Actors_ToActorId'可能導致回圈或多個級聯路徑。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 約束。
你能不能讓我知道如何在資料庫背景關系中使其發揮作用? 或者我是否需要以不同的方式對我的域進行建模?
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
??
}
uj5u.com熱心網友回復:
你可以用modelBuilder的方式為你的每個物體修改你的modelbuilder的屬性是:
。如果我用你的演員給你一個例子,它可以是 :
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder)。
modelBuilder.Entity<Transaction> (entity =>
{
entity.HasOne(t => t.FromActor)
.WithMany(a => a.Transactions)
.HasForeignKey(t => t.FromActorId)
.OnDelete(DeleteBehavior.NoAction)
.HasConstraintName("fk_transaction_id_from_actor")。
物體.HasOne(t => t.ToActor)
.WithMany(a => a.Transactions)
.HasForeignKey(t => t.ToActorId)
.OnDelete(DeleteBehavior.NoAction)
.HasConstraintName("fk_transaction_id_to_actor")。
});
}
或者類似的東西。正如你所看到的,這個語法是非常不言而喻的。
物體Transaction有一個Actor FromActor,該FromActor有一個Transaction的串列。外鍵應該是FromActorId,并且在洗掉時,你不會對物體做任何事情。該限制的名稱應該是 "fk_transaction_id_from_actor"。
這允許你隨意改變約束、行為和命名。它還可以允許你在必要時通過遷移在模型中添加資料:
modelBuilder.Entity<Actor>().HasData(
new。
{
ActorId = 1,
名 = "John"。
姓 = "Doe",名 = "John"。
},
new
{
ActorId = 2,
名 = "Jane"。
姓 = "Doe", 名 = "Jane".
});
當你進行 "dotnet ef migrations add myMigration "時,背景關系中的每一個變化都會在下一次遷移中被注冊,所以如果你在HasData中添加了資料,而且你不是單獨在專案中作業,一定要記住這些ID,否則遷移就會失敗!
如果你在HasData中添加了資料,而且你不是單獨在專案中作業,一定要記住這些ID。 我希望這對你有足夠的幫助。
uj5u.com熱心網友回復:
你必須在你的類中添加一些導航屬性
public class Actor
{
public int ActorId { get; set; }
.....
public virtual List<Transaction> FromActors {get; set; }
public virtual List<Transaction> ToActors { get; set; }
}
public class Transactionpublic int TransactionId { get; set; }
....
public int? FromActorId { get; set; }
public virtual Actor FromActor { get; set; }
public int? ToActorId { get; set; }
public virtual Actor ToActor { get; set; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332313.html
標籤:
