我有两个实体,这两个实体之间有两种不同的关系。第一个关系是一对多关系,第二个关系是多对多关系。请参阅下面的实体。
public class User
{
public int Id { get; set; }
public string Password { get; set; }
public string Name { get; set; }
// Collection that represent this user's attached social providers.
public virtual ICollection<SocialProvider> SocialProviders { get; set; }
// Collection representing this user's friends from her attached social providers.
public virtual ICollection<SocialProvider> SocialContacts { get; set; }
}
public enum Provider
{
Google,
Facebook,
Twitter
}
public class SocialProvider
{
public int Id { get; set; }
public Provider Provider { get; set; }
// Granted access token for talking to the provider API on user's behalf.
public string AccessToken { get; set; }
// User's unique ID at the social provider.
public string ProviderId { get; set; }
// The user that this SocialProvider belongs to.
public virtual User User { get; set; }
// The users that have this social provider as a contact.
public virtual ICollection<User> Contacts { get; set; }
}
工作流程如下:
- 我在应用程序中注册。这将创建一个
User
. - 我附上社交服务提供商(谷歌、Facebook 等)。这会创建一个或多个
SocialProvider
并将其添加到user.SocialProviders
. - 我从我附属的社交提供商那里导入我的联系人/朋友。这会拉下社交联系人列表并
SocialProvider
为每个人创建一个(如果它尚不存在)并将它们添加到user.SocialContacts
. 在这种情况下,SocialProvider
不会有父用户“拥有”它,也不会有父用户,AccessToken
直到用户注册应用程序并添加与之匹配的社交提供者,在这种情况下,这些东西将被填充。
这行得通吗?我有一种感觉 EF 即将变得非常困惑。我对 fluent API 甚至大部分数据注释都不是很熟悉。关于我可以做些什么来完成这项工作的任何建议,或者我应该只是SocialContacts
成为一个名为的新实体SocialContact
,主要看起来SocialProvider
只是为了避免任何令人困惑的关系内容?