我正在尝试从数据库访问实体,以确保在对数据库进行更改时确保数据完整性。
我正在测试改变外键/导航属性以指向关联表中不同行的不同方法。
我的孩子班级看起来像这样,
public string Name { get; set; }
public decimal Balance { get; set; }
public int AccountTypeId { get; set; }
public virtual AccountType AccountType { get; set; }
和对应的父级
public string Name { get; set; }
public virtual ICollection<Account> Accounts = new ICollection<Account>()
我正在使用工作单元和存储库模式来访问数据,因此在测试类中,我将执行以下操作;
(uow = new UnitOfWork)
AccountType accountType1 = new AccountType() { Name = "Bank" };
AccountType accountType2 = new AccountType() { Name = "Loan" };
uow.AccountTypes.Add(accountType1);
uow.AccountTypes.Add(accountType2);
uow.Commit();
Account account1 = new Account() { Name = "RBS", Balance = 20, AccountTypeId = 1 };
uow.Accounts.Add(account1);
uow.Commit();
但是在尝试访问AccountType
的{{1}}属性时失败了,我尝试将account1
设置为对AccountType
的引用,但是当涉及到将accountType1
从一个更改为另一个,每次我进行此更改时,都需要我从数据库中加载新的AccountType
,然后将其分配给accountType
,而不是简单地Account
的更改。是否无法通过Foreign key
更改关联并仍然允许Foreign Key
?还是我需要使用父实体表上的lazy loading
提供自己的查询?
谢谢!
修改
如果我创建实体并将它们全部保存在一个上下文中,然后尝试访问Navigation属性,则此方法有效,但是,如果我处理上下文,然后在新的上下文中执行查询,则它将无法加载信息。
答案 0 :(得分:0)
您需要将父级引用分配给每个子项,例如:
(uow = new UnitOfWork)
AccountType accountType1 = new AccountType() { Name = "Bank" };
uow.AccountTypes.Add(accountType1);
Account account1 = new Account() {
Name = "RBS",
Balance = 20,
AccountTypeId = 1
AccountType = accountType1
};
uow.Accounts.Add(account1);
uow.Commit();
此外,您无需在很多地方进行一项交易