三类多对多关系

时间:2018-10-17 10:06:56

标签: c# sql .net entity-framework-core

在开始时,我不得不说我不知道​​它是否必须是多对多的关系。

让我说我有三个班级:

用户信息,其中包含一些基本的用户信息,例如地区,城市

public class UserDetails
{
  public int Id{get;set;}
  public string City{get;set;}
  public strng Region{get;set;}
}

下一个类是UserDetailsDictionary

public class UserDetailsDictionary
{
  public int Id{get;set;}
  public string Name{get;set;}
  public string DetailsType{get;set;}
 }

此类将包含以下值:

Name = "football", detailsType="interests",
Name = "basketball", detailsType="interests",
Name = "brown", detailsType="eyes",
Name = "green", detailsType="eyes"

最后一个类应包含有关将UserDetails与Dictionary和Values连接的信息:

 public class JoiningClass
   {
     public UserDetails UserDetails{get;set;}
     public UserDetailsDictionary DictionaryItem{get;set;}
     public bool Value{get;set;}
   }

此类中的值应类似于:

(1,1,0)
(1,1,1)(first user like basketball)
(1,2,0)(first user does not have brown eyes)
(2,1,1) (second user likes football)

在代码中,我想从两种方式检查值:

UserDetailsDictionary type;
...
var val1 = _dbContext.UserDetails.Where(x=> x.DictionaryItem.Id == type.Id).Value;

以及其他方式

UserDetails ud;
...
var allDetailsOfUser = _dbContext.UserDetailsDictionary.ToArray();

而且,假设我想用棕色的眼睛找到所有用户(userDetails):

var dictionaryItem = _dbContext.UserDetailsDictionary.Where(x=>x.Name == "eyesColor").SingleOrDefault();

var userDetails = _dbContext.JoiningClass...?

我应该如何创建这些类? 如何在DbContext类中创建与实体框架(核心2.0)的正确关系?

1 个答案:

答案 0 :(得分:1)

让我知道这是否对您有用

我建议您将这些表归一化为

1。]第一个模型和表列

public class UserDetails
{
  public int UserId{get;set;}
  public string UserName{get;set;}
  public string City{get;set;}
  public strng Region{get;set;}
}

2。]第二个模型和表列

public class UserDetailsDictionary
{
  public int DictId{get;set;}
  public string InterestName{get;set;}
  public string DetailsType{get;set;}
 }

3。]用于存储数据的第三张表

public class UserData
{
  public int UserId{get;set;}
  public int DictonaryId{get;set;}
  public bool _value {get;set;}
 }

我假设您在问题中所显示的数据都存储在数据库中

  

(1,1,0)

     

(1,1,1)(第一个用户喜欢篮球)

     

(1,2,0)(第一个用户没有棕色眼睛)

     

(2,1,1)(第二位用户喜欢足球)

现在让我们举一个例子

  

(2,1,1)(第二位用户喜欢足球)

ID为2的用户拥有

  

Blockquote

对足球感兴趣(ID为1的兴趣)

现在从api中,您可以返回匿名类型

var m =(from data in _dbContext.UserData
Join details in _dbContext.UserDetails on data.UserID equals details.UserID
Join dict in _dbContext.UserDetailsDictionary on data.DictionaryID equals dict.DictID 
//where Condition if required 
select new {
UserName=details.UserName,
Interest= dict.IntersetName,
//_value=true/false 
}
).ToList();

除了匿名类型,您还可以将存储类型模型作为Json返回