我想将IdentityDb
表的外键实现为其他contextdb使用的其他表。
我有2个数据库上下文,一个是默认数据库上下文(我使用个人用户帐户项目模板创建了一个MVC 5
项目),另一个是我自己创建的上下文,该数据库使用默认上下文以外的其他表。
在ApplicationDbContext
中,我们有一个AspNetUsers
表,该表具有许多列,但是我感兴趣的是Id
。在另一个ContextDB
中,我有一个名为Checkout
的表,该表也有许多列,而我感兴趣的是Id
。现在,我想实现一个many to many
关系。因此,我创建了另一个表,让我们调用具有CheckoutProducts
列的UserId
表,该表将是引用AspNetUsers
中主键的外键,而我有CheckoutId
同样是引用Checkout
表中主键的外键。
如何在代码中执行以上操作?
public class CheckoutUsers
{
[Key, Column(Order = 0)]
[ForeignKey("User")]
[MaxLength(128)]
public string UserId { get; set; }
[Key, Column(Order = 1)]
[ForeignKey("Checkout")]
public int CheckoutId { get; set; }
public virtual ApplicationUser User { get; set; }
public virtual Checkout Checkout { get; set; }
}
当我运行应用程序时,它返回:
System.Data.Entity.ModelConfiguration.ModelValidationException:'在模型生成过程中检测到一个或多个验证错误: ShopOnline.App_Start.IdentityUserLogin::EntityType'IdentityUserLogin'没有定义键。定义此EntityType的键。 ShopOnline.App_Start.IdentityUserRole::EntityType'IdentityUserRole'没有定义键。定义此EntityType的键。 CheckoutUsers_User_Source::多重性在关系“ CheckoutUsers_User”中的角色“ CheckoutUsers_User_Source”中无效。因为从属角色属性不是关键属性,所以从属角色多重性的上限必须为'*'。 IdentityUserLogins:EntityType:EntitySet'IdentityUserLogins'基于未定义键的'IdentityUserLogin'类型。 IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基于未定义键的'IdentityUserRole'类型。 '
要提及的是,如果我删除此表或仅删除字段ApplicationUser User
,那么就我没有错误,或者我的UserId在其他平板电脑上没有外键而言,一切正常