如何在 SQL 中创建一个列,它是 .NET Core MVC 中的数据数组?

问题描述 投票:0回答:3

我有我的模型页面,但我似乎无法做的一件事就是获取一个列表/数组的属性。

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace MVCPractuce.Models
{
    public class Stoof
    {
        public int StoreID { get; set; }
        public string StoreName { get; set; }
        public int StoreYear { get; set; }
        public decimal StoreCost { get; set; }
        public string StoreMotto { get; set; }
        public int StoreLikes { get; set; }
        public List<string> StoreItems { get; set; }

        public Stoof()
        {

        }

    }
}

我收到无法映射的错误,因为它的类型为 List,不支持原始类型。有人知道我该如何解决这个问题吗?

c# asp.net-mvc asp.net-core
3个回答
0
投票

公共 ICollection StoreItems { 获取;放; }

ICollection 需要是 StoreItems 类型。然后将外键引用添加到 StoreItems 实体中以进行正确的映射


0
投票

一种方法就是上面提到的,你可以创建一个新类,然后使用一对多关系。

另一种方法是转换它,你可以使用以下代码:

在你的情况下(

using System.Text.Json;
)

protected override void OnModelCreating(ModelBuilder builder)
{
 //...
 builder.Entity<Stoof>()
        .Property(e => e.StoreItems)
        .HasConversion(
          v => JsonSerializer.Serialize(v, default),
          v => JsonSerializer.Deserialize<List<string>>(v, default));
 //...
}

迁移和更新数据库。

测试结果:

enter image description here


0
投票

我使用了预览答案,但由于错误而更改了

protected override void OnModelCreating(ModelBuilder mb)
    {
        base.OnModelCreating(mb);
        mb.Entity<ReportSchedule>()
        .Ignore(e => e.Conditions)
        .Property(e => e.SelectedFields)
        .HasConversion(
            v => JsonSerializer.Serialize(v, new JsonSerializerOptions()), // Certifique-se de usar o System.Text.Json
            v => JsonSerializer.Deserialize<List<string>>(v, new JsonSerializerOptions()));

        mb.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
    }
© www.soinside.com 2019 - 2024. All rights reserved.