Отношения многие ко многим с тремя классами - PullRequest
0 голосов
/ 17 октября 2018

В начале я должен сказать, что я не знаю, должно ли это быть отношение «многие ко многим». Корабль

Допустим, у меня есть три класса:

User-detalis, которые имеютнекоторая базовая информация о пользователе, например регион, город

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 со словарем и значениями:

 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...?

Как мне создать эти классы?Как создать правильные отношения с сущностью (ядро 2.0) в классе DbContext?

1 Ответ

0 голосов
/ 17 октября 2018

Дайте мне знать, если это работает для вас

Я предложу вам нормализовать эти таблицы как

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

интерес к футболу (интерес с идентификатором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();

Вместо анонимного типа вы также можете возвращать Storly Type Model как Json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...