編輯這篇文章缺乏足夠的信息來獲得一些指導嗎?EF上下文在添加實體後不保留值
我有這樣的方法來插入一個實體到數據庫:
public void Insert(T entity)
{
_context.Set<T>().Add(entity);
_context.SaveChanges();
}
當我將它添加到上下文之前檢查entity
,我CustomerRole
領域是存在的。一旦添加發生,上下文似乎沒有它。正因爲如此,我收到此錯誤:
Entities in 'CcDataContext.Customers' participate in the 'Customer_CustomerRole' relationship. 0 related 'Customer_CustomerRole_Target' were found. 1 'Customer_CustomerRole_Target' is expected.
這些圖像顯示了我的意思:
檢查我的實體
檢查上下文
任何人都可以解釋這種行爲,我能做些什麼?
這是我的類的結構(上剪下來的簡潔):
public class Customer : BaseEntity
{
public CustomerRole CustomerRole { get; set; }
}
class CustomerMap : EntityTypeConfiguration<Customer>
{
public CustomerMap()
{
HasRequired(t => t.CustomerRole)
.WithMany(t => t.Customers);
}
}
public class CustomerRole : BaseEntity
{
private ICollection<Customer> _customers;
public ICollection<Customer> Customers
{
get { return _customers ?? (new List<Customer>()); }
set { _customers = value; }
}
}
我可以證實,客戶地圖被添加到配置和我的數據庫是建立在他們行。
這是我在做這做插入電話:
public Customer InsertGuestCustomer()
{
var customer = new Customer();
CustomerRole guestRole = GetCustomerRoleByName("Guest");
if (guestRole == null)
throw new Exception("Customer Role is not defined!");
customer.UserName = "";
customer.EmailAddress = "";
customer.Password = "";
customer.IsAdmin = false;
customer.CustomerRole = guestRole;
_customerRepository.Insert(customer);
return customer;
}
我在我的數據庫中沒有其他數據,這將是第一個客戶記錄,只有一個CustomerRole。我的Customer
表有一個外鍵指向我的CustomerRole.Id
表/列。
'Customer' +'CustomerRole'的來源是什麼?他們是如何創建的?預期的行爲是'CustomerRole'具有'Added'狀態。不知怎的,關係修復決定了這種關係應該被打破,但很難說出爲什麼不知道爲什麼不知道在這個「插入」調用之前發生了什麼。也許有原始的外鍵屬性有衝突的值? –
@GertArnold - 感謝您的評論,謝謝。我在圖片下方添加了更多信息。我感謝你的時間。 – webnoob
看着你的代碼,我懷疑'guestRole'被連接到不同於'_customerRepository'中的上下文的上下文中。您必須(以某種方式)在保存更改之前確保它已附加到客戶的上下文(狀態:附加)。或者在'Customer'中設置一個原始的RoleId值。 –