LINQ К объекту SQL возражает как объекты области

Я должен исправить свой комментарий сверху. Ваш dataView должен быть типа [TableSection: [Category]].

Теперь несколько слов о вашей setData функции. В вашем цикле вы используете оператор объединения нулей ?? при инициализации категории. Может быть, я что-то упустил, но я не вижу, как это может привести к фатальной ошибке. В категории нет сбойного инициализатора. Сейчас я точно не знаю, что такое datas и откуда оно берется, но если некоторые из свойств там являются необязательными, я бы рекомендовал сделать их необязательными и в категории.

Затем попробуйте поработать с map для преобразования ваших данных. Вот пример:

var dataView = [TableSection: [Category]]()
var dataViewLoop = (0 ..< 10).map { i -> Category in
  let status = i % 2 == 0 ? "confirmed" : "request"

  return Category(clientName: "\(i)", appType: "\(i)", appDateTime: "nil", status: status, photo: nil)
}

dataView[.appointments] = dataViewLoop.filter({ [110].status == "confirmed" })
dataView[.requests] = dataViewLoop.filter({ [110].status == "request" })
11
задан BIBD 26 November 2008 в 19:06
поделиться

7 ответов

Мне лично не нравится, когда мои объекты распространяются через слои. Мой POCO's возврата DAL (конечно, это часто означает дополнительную работу, но я нашел этот намного более чистый - возможно, что это будет более просто в следующей версии.NET ;-)).

Вопрос не так прост и существует большое другое размышление о предмете (я продолжаю спрашивать меня тот же вопрос, что Вы).

Возможно, Вы могли смотреть на демонстрационное приложение Витрины MVC: Мне нравится сущность понятия (отображение, которое происходит в слое данных особенно).

Надеюсь, это поможет.

1
ответ дан 3 December 2019 в 10:05
поделиться

Я возвращаю IQueryable POCOs от моего DAL (который использует LINQ2SQL), таким образом, никакой объект объекта Linq никогда не оставляет DAL. Эти POCOs возвращаются к службе и уровням UI, и также используются для пасования назад данных в DAL для обработки. Linq обрабатывает это очень хорошо:

 IQueryable<MyObjects.Product> products = from p in linqDataContext.Products 
                                          select new MyObjects.Product //POCO
                                          {
                                              ProductID = p.ProductID
                                          };
 return products;
5
ответ дан 3 December 2019 в 10:05
поделиться

Для большинства проектов мы используем LINQ для объектов SQL как наши бизнес-объекты.

LINQ разработчику SQL позволяет Вам управлять доступностью классов и свойств, которые это генерирует, таким образом, можно ограничить доступ к чему-либо, что позволило бы потребителю нарушать бизнес-правила и обеспечивать подходящие общедоступные альтернативы (которые уважают бизнес-правила) в частичных классах.

Существует даже статья о реализации Вашей бизнес-логики этот путь на MSDN.

Это сохраняет Вас от записи большого количества утомительного шаблонного кода, и можно даже сделать объекты сериализуемыми, если Вы хотите возвратить их из веб-сервиса.

Создаете ли Вы отдельный слой для бизнес-логики, действительно зависит от размера Вашего проекта (с большими проектами, обычно имеющими большее изменение между бизнес-логикой и уровнями доступа к данным).

Я верю LINQ к попыткам Объектов предоставить универсальное решение этой загадки путем поддержания двух отдельных моделей (концептуальная схема для бизнес-логики и схема устройства хранения данных для доступа к данным).

3
ответ дан 3 December 2019 в 10:05
поделиться

Существует подобное сообщение здесь, однако, я вижу, что Ваш вопрос больше, о каком необходимо сделать, а не как необходимо сделать это.

В небольших приложениях я нахожу секунду ПОСТЕПЕННО реализацией, чтобы быть расточительным в объемных приложениях (особенно те, которые реализуют веб-сервисы), ПОСТЕПЕННО, объект (обычно Объект Передачи данных) полезен.

Если Ваше приложение попадает в более поздний случай, можно хотеть посмотреть на Услуги передачи данных ADO.NET.

Надежда, которая помогает!

1
ответ дан 3 December 2019 в 10:05
поделиться

Следует иметь в виду, что Linq к SQL не является перспективной технологией. Это было выпущено, это интересно играть с, но Microsoft не берет его нигде. У меня есть чувство, что это не будет поддерживаться навсегда также. Смотрите на Платформу объекта (EF) Microsoft, которая включает некоторые Linq к совершенству SQL.

0
ответ дан 3 December 2019 в 10:05
поделиться

Я использую пользовательский генератор LinqToSQL, положился на тот, который я нашел в Интернете вместо MSLinqToSQLGenerator по умолчанию. Для создания моих верхних уровней независимыми от таких объектов Linq я создаю интерфейсы, чтобы представить каждого из них и затем использовать такие интерфейсы в этих слоях. Пример:


public interface IConcept {
    long Code { get; set; }
    string Name { get; set; }
    bool IsDefault { get; set; }
}

public partial class Concept : IConcept { }

[Table(Name="dbo.Concepts")]
public partial class Concept
{
    private long _Code;
    private string _Name;
    private bool _IsDefault;
    partial void OnCreated();
    public Concept() { OnCreated(); }
    [Column(Storage="_Code", DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true)]
    public long Code
    {
             //***
    }
    [Column(Storage="_Name", DbType="VarChar(50) NOT NULL")]
    public string Name
    {
             //***
    }
    [Column(Storage="_IsDefault", DbType="Bit NOT NULL")]
    public bool IsDefault
    {
             //***
    }
}

Конечно, существует намного больше, чем это, но это - идея.

0
ответ дан 3 December 2019 в 10:05
поделиться

Я на самом деле боролся с этим, также. Используя простой ванильный LINQ к SQL, я быстро отказался от инструментов DBML, потому что это связало объекты с плотно к DAL. Я боролся за более высокий уровень незнания персистентности, хотя Microsoft не сделала его очень легким.

То, что я закончил тем, что делал, было почерком, который слой незнания персистентности, при наличии DAL наследовали от моего POCOs. Наследованные объекты выставили те же свойства ПОСТЕПЕННО, это наследовалось, поэтому в то время как в слое незнания персистентности, я мог использовать атрибуты для отображения на объекты. Названный затем мог бросить наследованный объект назад к его базовому типу или иметь DAL, делают это для них. Я предпочел последний случай, потому что он уменьшил объем броска, который должен был быть сделан. Предоставленный, это было, прежде всего, реализацией только для чтения, таким образом, я должен буду пересмотреть ее для более сложных сценариев обновления.

Объем ручного кодирования для этого является довольно большим, потому что я также должен вручную поддержать (после кодирования, для начала) контекст и поставщика для каждого источника данных, сверх объектного наследования и отображений. Если бы этот проект удерживался от использования, то я определенно переместился бы в больше надежного решения.

С нетерпением ожидая Платформы Объекта, незнание персистентности является обычно требуемой функцией согласно блогам дизайна для команды EF. Тем временем, если Вы решаете пойти путем EF, Вы могли бы всегда смотреть на предварительно прокрученный инструмент незнания персистентности, как проект EFPocoAdapter на MSDN, для помощи.

0
ответ дан 3 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: