我首先使用实体框架 6 代码。我在跟踪导航属性和外键的情况时遇到了一些麻烦。让我用一个例子来详细说明。在此示例中,我正在创建一个对象并观察在创建 FK 引用的实体时导航属性发生的情况。
实体:
DomainUser {AccountStatus ... , UserAccount, UserAccountId}引用 UserAccount
用户帐户 { 用户帐户 ID ... }
第一种情况 - 导航属性在创建时为空:
var newAccount = userAccountService.CreateAccount(userName, password, email);
var domainUser = new DomainUser
{
AccountStatus = active,
UserAccountId = newAccount.ID
};
domainUserRepository.Add(domainUser); // save changes is called on the context in this method.
return domainUser; // at this point, the UserAccount property of domainUser is null
第二种情况 - 抛出 InvalidOperationExceptionException
var newAccount = userAccountService.CreateAccount(userName, password, email);
var domainUser = new DomainUser
{
AccountStatus = active,
UserAccount = newAccount
};
domainUserRepository.Add(domainUser); // "An entity object cannot be referenced by multiple instances of IEntityChangeTracker."
return domainUser;
所以我的问题是,如何使用导航属性 UserAccount?
我是否必须使用 UserAccountId 从数据库中获取它?
如果是这样,我该如何将它附加到 DomainUser 对象?
我觉得这应该是直观的。但它不是。