我有一个实体与 AspNetUsers 表中的两个用户相关:
- 具有租户角色的用户
- 具有房东角色的用户
- 属性(使用实体框架创建(
在我的财产上下文中创建外键关系时,我无法弄清楚如何将 1 个租户和 1 个房东与 1 个属性相关联。为此,我需要在我的属性类中实现两个外键,但它们都是来自 Identity 的用户 ID。这似乎不对,我无法理解它。下面是我的 Property.cs 文件的开头
。public class Property
{
[ScaffoldColumn(false)]
public string PropertyID { get; set; }
[Key, ForeignKey("User")]
public string LandlordId { get;set; }
[Key, ForeignKey("User")]
public string TenantId { get;set; }
//other fields
public virtual ApplicationUser User { get;set; }
}
有两种方法可以执行此操作:
-
保留当前模型,并确保正确设置导航属性:
public class Property { public int PropertyId { get; set; } public int TenantId { get; set; } public int LandlordId { get; set; } public User Tenant { get; set; } public User Landlord { get; set; } }
请注意,由于这正确遵循了配置约定,因此无需应用
[ForeingKey]
。 -
这将代表您的应用程序中更大的变化。您需要引入一个
Landlord
和一个Tenant
实体:public class Landlord { ... public int UserId { get; set; } public User User { get; set } } public class Tenant { ... public int UserId { get; set; } public User User { get; set } }
然后将这些映射到
Property
实体:public class Property { public int PropertyId { get; set; } public int TenantId { get; set; } public int LandlordId { get; set; } public Tenant Tenant { get; set; } public Landlord Landlord { get; set; } }
现在,哪种方法在您的业务领域和此应用程序中更有意义,由您决定。