[英]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.