我有一个应该作为银行(学校项目)工作的应用程序。
我有五个班级
在Customer
我有
Public virtual list<Account> Accounts
在Account
我有
Public Virtual Customer Customer
我有客户客户,以便实体框架知道该帐户属于谁
在Transactions
我有
Public Account Account
现在我遇到问题,例如我想从我的应用程序向客户添加帐户,然后将其添加到数据库中的Account表。 如果我这样做,Entity Framework出于某种原因在Customer表中添加了一个新Customer。这是代码:
public void DbAddAccount(Account account)
{
using (var db = new Data.BankContext())
{
db.Accounts.Add(account);
db.SaveChanges();
}
}
如果我在Transactions表中添加一个条目,它将在表格中添加一个新帐户和一个新客户。
基于我的代码
在数据库中创建以下内容 "dbo.Accounts",
c => new
{
Id = c.Int(nullable: false, identity: true),
Balance = c.Decimal(nullable: false, precision: 18, scale: 2),
Interestrate = c.Decimal(nullable: false, precision: 18, scale: 2),
AccountType = c.String(),
AccountNumber = c.Int(nullable: false),
LoanInterestRate = c.Decimal(precision: 18, scale: 2),
CreditLine = c.Decimal(precision: 18, scale: 2),
MaxFreeWhitdraws = c.Boolean(),
Discriminator = c.String(nullable: false, maxLength: 128),
Customer_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Customers", t => t.Customer_Id)
.Index(t => t.Customer_Id);
CreateTable(
"dbo.Customers",
c => new
{
Id = c.Int(nullable: false, identity: true),
FirstName = c.String(),
LastName = c.String(),
SSN = c.String(),
})
.PrimaryKey(t => t.Id);
CreateTable(
"dbo.Transactions",
c => new
{
Id = c.Int(nullable: false, identity: true),
Date = c.DateTime(nullable: false),
TransactionType = c.String(),
Amount = c.Decimal(nullable: false, precision: 18, scale: 2),
Balance = c.Decimal(nullable: false, precision: 18, scale: 2),
Account_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Accounts", t => t.Account_Id)
.Index(t => t.Account_Id);
我在哪里弄错了?
答案 0 :(得分:1)
这是因为你的外键限制。
您的Transactions
表格中有一个不可为空的列(Account_Id
),它是Accounts
表的外键。这意味着必须是Account_Id
的值,而值必须对应Id
表中的Accounts
值。当您向Transactions
表添加条目而未指定Account_Id
时,EF&#34;有帮助&#34;使用默认值创建新的Accounts
条目,并使用其Id
作为Account_Id
值。
由于Accounts
与Customers
之间也存在外键关系,因此同样的流程也适用于此(以及任何其他)新添加的帐户。