[英]Multiple foreign keys pointing to same table in Entity Framework are indistinguisible
[英]Entity Framework Multiple Foreign Keys on same table not mapping correctly
我在此站點上看到了幾個將同一表上的多個外鍵映射到實體的示例。 我想我已經按照示例中顯示的方式對事物進行了編碼,但是當我嘗試保存我的實體時,兩個外鍵都指向同一實體,而不是兩個單獨的實體。 我期望我的父實體將引用鏈接表中的兩個不同實體。 我的課程如下:
public class User: PersistentEntity
{
[Required]
public string FullName { get; set; }
[Required]
public string HID { get; set; }
[Required]
public string VID { get; set; }
[Required]
[MaxLength(100)]
public string UserName { get; set; }
//nav properties
[InverseProperty("ImpersonatedUser")]
public virtual ICollection<UserOverride> ImpersonatedUsers { get; set; }
[InverseProperty("User")]
public virtual ICollection<UserOverride> Users { get; set; }
}
public class UserOverride: PersistentEntity
{
[Required]
[ForeignKey("User")]
public int UserId { get; set; }
[Required]
[ForeignKey("ImpersonatedUser")]
public int ImpersonatedUserId { get; set; }
[Required]
public bool Active { get; set; }
//nav fields
[IgnoreForValidation]
[ForeignKey("UserId")]
public virtual User User { get; set; }
[IgnoreForValidation]
[ForeignKey("ImpersonatedUserId")]
public virtual User ImpersonatedUser { get; set; }
}
我創建了幾個沒有任何ImpersonatedUser對象的用戶,然后嘗試創建一個新的User對象,並將這些先前的用戶之一設置為ImpersonatedUser。 我正在將ImpersonatedUserId設置為與該用戶的UserId相等,並將此實體添加到User上的ImpersonatedUsers列表中,但是當我嘗試保存時,它將ImpersonatedUserId更改為我要保存的新用戶的ID,並添加了相同的名稱用戶到用戶對象上的用戶列表。 如果我嘗試設置整個ImpersonatedUseer對象,然后保存,則會收到有關多個外鍵不正確的錯誤。
我的問題是,我在做什么錯? 這看起來像我在這里看到的其他示例一樣,但是我無法使其正常工作。 我是否正確建模? 謝謝你的幫助。
編輯 - -
//create a couple users
var user = new User
{
FullName = "Ritchie Blackmore",
HID = "01010101",
VID = "rblackmore",
UserName = "rblackmore"
};
var userResult = UserService.SaveOrUpdate(user);
這是我要創建的用戶的創建方式:
var impersonatedUsers = UserService.FindByReadOnly(u => u.UserName.Equals("rblackmore"));
var impersonatedUser = Queryable.FirstOrDefault(impersonatedUsers);
var user = new User
{
FullName = "Ronnie James Dio2",
HID = "03030303",
VID = "rjdio2",
UserName = "rjdio2",
Roles = new List<Role>
{
roleResult1.Entity, //pre-existing role
//TODO: the following are new roles, added while adding the user
//probably shouldn't allow this scenario, but it might come in handy
new Role
{
Name = "Client2",
Description = "Client",
DisplayName = "Client"
},
new Role
{
Name = "Developer2",
Description = "Developer",
DisplayName = "Developer"
}
},
ImpersonatedUsers = new List<UserOverride>
{
new UserOverride {ImpersonatedUserId = impersonatedUser.Id, SystemId = system.Id, Active = true}
}
};
var result = UserService.SaveOrUpdate(user);
如您所見,我僅設置模擬用戶的ID,而不是整個模擬用戶對象的ID。 我也嘗試分配整個對象,這引發異常,因為它試圖將對象的鍵更改為新用戶的鍵。
您是否嘗試僅設置Id並單獨保留導航屬性? 基本上,當你說:
我將ImpersonatedUserId設置為等於該用戶的UserId,並將此實體添加到User的ImpersonatedUsers列表中。
保留第二部分(和之后),然后在ImpersonatedUserId屬性中設置用戶ID。 那應該建立正確的關系。
讓我知道情況如何。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.