模型看起來像這樣
public class Account : BaseEntity
{
public string AccountNumber { get; set; }
public string AccountTitle { get; set; }
public decimal CurrentBalance { get; set; }
public AccountStatus AccountStatus { get; set; }
[ForeignKey("UserId")]
public string UserId { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Transaction> Transactions { get; set; }
}
public enum AccountStatus
{
Active = 0,
InActive = 1
}
public class User : BaseEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string ProfilePicUrl { get; set; }
public virtual Account Account { get; set; }
}
public class Transaction : BaseEntity
{
public TransactionType TransactionType { get; set; }
public DateTime TransactionDate { get; set; }
public decimal TransactionAmount { get; set; }
public virtual Account Account { get; set; }
}
public enum TransactionType
{
Deposit = 0,
Withdraw = 1
}
所以從技術上講,用戶有一個帳戶,而帳戶有一個或多個交易
我正在播種如下資料基本上有 3 個用戶,其中 2 個有與之關聯的帳戶
public class BBBankContext : DbContext
{
public BBBankContext(DbContextOptions<BBBankContext> options) : base(options) { }
public DbSet<User> Users { get; set; }
public DbSet<Account> Accounts { get; set; }
public DbSet<Transaction> Transactions { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// modelBuilder.Entity<User>()
//.HasOne<Account>(s => s.Account)
//.WithOne(ad => ad.User)
//.HasForeignKey<Account>(ad => ad.UserId);
modelBuilder.Entity<User>(b =>
{
b.HasData(new User
{
Id = "2a2615d0-1c0d-4b9c-b41b-cc01aeb35919",
FirstName = "Raas",
LastName = "Masood",
Email = "[email protected]",
ProfilePicUrl = "",
});
b.HasData(new User
{
Id = "b6111852-a1e8-4757-9820-70b8c20e1ff0",
FirstName = "Ali",
LastName = "Taj",
Email = "[email protected]",
ProfilePicUrl = ""
});
b.HasData(new User
{
Id = "582ebb0b-f9e0-4385-8787-37bd337f18b7",
FirstName = "Salman",
LastName = "Taj",
Email = "[email protected]",
ProfilePicUrl = ""
});
});
modelBuilder.Entity<Account>(b =>
{
b.HasData(new Account
{
Id = "37846734-172e-4149-8cec-6f43d1eb3f60",
AccountNumber = "0001-1001",
AccountTitle = "Ali Taj",
CurrentBalance = 2055M,
AccountStatus = AccountStatus.Active,
UserId = "b6111852-a1e8-4757-9820 -70b8c20e1ff0"
});
b.HasData(new Account
{
Id = "2f115781-c0d2-4f98-a70b-0bc4ed01d780",
AccountNumber = "0002-2002",
AccountTitle = "Salman Taj",
CurrentBalance = 545M,
AccountStatus = AccountStatus.Active,
UserId = "582ebb0b-f9e0-4385-8787-37bd337f18b7"
});
});
modelBuilder.Entity<Transaction>().HasData(
new
{
Id = Guid.NewGuid().ToString(),
AccountId = "37846734-172e-4149-8cec-6f43d1eb3f60",
TransactionAmount = 1000M,
TransactionDate = DateTime.Now,
TransactionType = TransactionType.Deposit
},
new
.....
添加遷移并運行“更新資料庫”后,我收到錯誤
INSERT 陳述句與 FOREIGN KEY 約束“FK_Accounts_Users_UserId”沖突。沖突發生在資料庫“BBBankDB”、表“dbo.Users”、列“Id”中。
花了很多時間來解決這個問題:(我做錯了什么?
uj5u.com熱心網友回復:
我認為問題是你UserId在這個種子中有一個錯誤。
b.HasData(new Account
{
Id = "37846734-172e-4149-8cec-6f43d1eb3f60",
AccountNumber = "0001-1001",
AccountTitle = "Ali Taj",
CurrentBalance = 2055M,
AccountStatus = AccountStatus.Active,
UserId = "b6111852-a1e8-4757-9820 -70b8c20e1ff0"
// ^
// Here
});
洗掉這個額外的空間,你的錯誤就會消失。
UserId = "b6111852-a1e8-4757-9820-70b8c20e1ff0"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/461439.html
