Наследование в C# и .NET: организовать картирование базового класса и полученных свойств классаC#

Место общения программистов C#
Ответить
Anonymous
 Наследование в C# и .NET: организовать картирование базового класса и полученных свойств класса

Сообщение Anonymous »

Я получаю следующее исключение: < /p>

Исключение произошло при переходе на результаты запроса для контекста типа 'myproject.data.sqlserver.sqlserverconcontext'.
system.invalidoperation. Операция. Тема: < /p>
  • Как я могу сначала отображать открытый текст перед изображением в Blazor? Ответ с лучшим рейтингом (со второй ветки с маркированным вопросом), я уже внедрил эти аннотации на своем конце, но я столкнулся с той же проблемой.

    Код: Выделить всё

    [Browsable(false)]
    [Bindable(false)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    [EditorBrowsable(EditorBrowsableState.Never)]
    [Column("img")]
    public byte[]? Img { get; set; }
    
    Note (as of this writing): the thread's last activity is on Oct 31, 2019, at 14:52.
    However, since I am currently in .NET 9:



    версия < /th>
    Дата исходной даты выпуска < /th>
    < /tr>
    < /thead>


    . />
    Источник: .net и .net Core Lifecycle.

    Я искал способ «Проблема»

    Класс может помешать другим классам от его наследства или от любого из его членов, объявив себя или члена как герметичный. < /P>
    < /blockquote>
    в дополнение, в соответствии с герметичным (C#. />
    Вы также можете использовать модификатор запечатаного < /code> на методе или свойстве, который переопределяет виртуальный метод или свойство в базовом классе. Это позволяет вам позволить классам выходить из вашего класса и не допустить их переоценки конкретных виртуальных методов или свойств. Вот мой фрагмент кода: < /p>

    Код: Выделить всё

    [Keyless]
    public class PlainTextList : ImgList
    {
    // other properties here...
    
    [Column("name")]
    public string? Name { get; set; }
    
    [Column("img")]
    sealed protected override byte[]? Img { get; set; }
    }
    
    [Keyless]
    public class ImgList
    {
    [Column("id")]
    public string? ID { get; set; }
    
    [Column("img")]
    protected virtual byte[]? Img { get; set; }
    }
    < /code>
    Наследство класса работает, но на моем коде первого кода на странице бритвы я сталкиваюсь с исключением: < /p>
    
    'plaintext.img 'incescessible из-за уровня защиты (CS0122) < /p>
    
    на public 
    вместо этого. Приведенная выше ошибка разрешена, но если я запускаю программу, я получаю ошибку: < /p>

    Исключение произошло при переходе на результаты запроса для контекста типа 'myproject.data.sqlserver.sqlserverconconceptontext'. 'Outsql' Operation. < /P>
    < /blockquote>

    Это мой фрагмент кода моего глобального помощника: < /p>

    Код: Выделить всё

    public async Task PTListFromSqlAsyncList(string spName, Dictionary parameters)
    {
    var paramDefs = SQLServerInnerHelper.GlobalWithoutOutputParams();
    
    SqlParameter[]? sqlParameter = MinimalDbSettings.SPArrayOfTuplesAndDictPreScale(paramDefs, parameters);
    
    var sqlParam = MinimalDbSettings.SQLParamLessDynamic(spName, sqlParameter);
    
    return await _context.PlainTextList
    .FromSql(sqlParam)
    .ToListAsync();
    }
    
    public async Task ImgListFromSqlAsyncList(string spName, Dictionary parameters)
    {
    var paramDefs = SQLServerInnerHelper.GlobalWithoutOutputParams();
    
    SqlParameter[]? sqlParameter = MinimalDbSettings.SPArrayOfTuplesAndDictPreScale(paramDefs, parameters);
    
    var sqlParam = MinimalDbSettings.SQLParamLessDynamic(spName, sqlParameter);
    
    return await _context.ImgList
    .FromSql(sqlParam)
    .ToListAsync();
    }
    < /code>
    
    Вот как я управляю этими свойствами в коде первого кода (частичная часть его): < /p>
    private List? pTList = new();
    private List? imgList = new();
    private PaginationState pagination = new PaginationState();
    private string nameFilter = string.Empty;
    
    private IEnumerable? filteredList => string.IsNullOrWhiteSpace(nameFilter)
    ? pTList : (initPerPage ==
    PaginationPerPage.ShowAll)
    ? pTList!.Where(data => data.Name?.ToLower().Contains(nameFilter.ToLower()) == true) :
    pTList!.Where(data
    =>
    data.Name?.ToLower().Contains(nameFilter.ToLower()) == true);
    
    private IEnumerable? pagedList => filteredList!
    .Skip((pagination.CurrentPage - 1) * pagination.ItemsPerPage)
    .Take(pagination.ItemsPerPage);
    
    private int TotalPages => (int)Math.Ceiling((double)filteredList!.Count() / pagination.ItemsPerPage);
    private string currentSortColumn = ""; // to let the SP's select ordered by script handle sorting
    private bool sortAscending = true;
    private IEnumerable? SortedList => currentSortColumn switch
    {
    // other code for sorting of fields
    "Name" => sortAscending ? pagedList!.OrderBy(a => a.Name) : pagedList!.OrderByDescending(a =>
    a.Name),
    "Img" => sortAscending ? pagedList!.OrderBy(a => a.Img) : pagedList!.OrderByDescending(a =>
    a.Img),
    _ => pagedList
    };
    < /code>
    Примечание. Приведенный выше фрагмент кода используется для таблицы.private async Task LoadPlainTexts()
    {
    var sQLServerHelper = new SQLServerHelper(context);
    pTList = null; // ensure spinner shows
    StateHasChanged(); // force re-render to show spinner
    var spParam = SQLServerInnerHelper.SomeGlobalMethodRazorPageParam(key: "PLAINTEXT_LIST");
    pTList = await sQLServerHelper.PTListFromSqlAsyncList("testSP", spParam);
    pagination.TotalRecords = pTList.Count;
    
    if (pTList is null)
    {
    NavigationManager.NavigateTo("notfound");
    }
    StateHasChanged();
    }
    
    private async Task LoadImages()
    {
    var sQLServerHelper = new SQLServerHelper(context);
    imgList = null; // ensure spinner shows
    StateHasChanged(); // force re-render to show spinner
    var spParam = SQLServerInnerHelper.SomeGlobalMethodRazorPageParam(key: "IMG_LIST");
    imgList = await sQLServerHelper.ImgListFromSqlAsyncList("testSP", spParam);
    
    if (imgList is null)
    {
    NavigationManager.NavigateTo("notfound");
    }
    StateHasChanged();
    }
    < /code>
    
    В моем SP у меня есть две отдельные функции для списка простого текста и список данных файла. Вот мой упрощенный скрипт: < /p>
     funtext_list function < /h4>
    SELECT id, name, {some_plain_text_here} FROM SomeTable
    
    Примечание: {some_plain_text_here} , чтобы сократить скрипт.

    Код: Выделить всё

    SELECT id, file FROM SomeTable
    < /code>
    
    Показывает, что использование герметичного модификатора для моего конкретного варианта использования не работает, как и ожидалось. Дизайн системы, к которому я стремился принести отдельные экземпляры для списка [b] простого текста [/b] и списка данных [b] File [/b]. Затем, на уровне приложения, я объединю эти записи в один список.  Тем не менее, рендеринг  асинхронно  разделен для [b] простого текста [/b] и [b] файловых данных [/b], что делает более удобный пользовательский опыт .
    Я использовал концепцию  наследие , чтобы слияние двух классов, и я использовал меня, потому что я задумал меня, я использовал меня, я использовал меня, потому что я использовал меня, я использовал меня, я использовал, потому что я задумал меня, и я использовал, потому что я использовал меня, и я использовал, потому что я использовал меня, и я использовал меня, я использовал, потому что я задумал меня, чтобы я был навсегда разыскивается.SELECT st.id, st.name, sot.img {some_plain_text_here}
    FROM SomeTable AS st
    INNER JOIN SomeOtherTable AS sot ON sot.id = st.id
    
    Примечание. Сценарий t-sql предназначен для демонстрационных целей только .
    Мое веб-приложение Blazor работает гладко, но разделение проблем для em> emnedendered eM> emneNenderyed-em-em-em-em-em-em-em-em-em-em-em-em-em-em-em-em-em. правильно. Другими словами, данные Plain Text и файл отображаются одновременно, или простой текст все еще связан с классом модели файла.
    Я был удивлен, потому что я думал, что картирование в EF Core разделяет plain Text и файлы , которые предоставляются данные, предоставленные DEF, которые предоставлены DEF, которые предоставляются DEF, которые предоставляются DEF. Как вы можете видеть в моем глобальном помощнике, классы base < /em> и , полученные < /em>, указаны отдельно и основаны на соответствующем их типе класса. классы свойства?
  • Есть ли другие существующие решения в C#/. Net 9? Позже пропущенные свойства на коде фронта/заднего времени?


Подробнее здесь: https://stackoverflow.com/questions/797 ... nd-derived
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»