程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了有没有办法在主键 id 下列出对象的查询?对象本身在 aspnetcore 的主表上引用了外键大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决有没有办法在主键 id 下列出对象的查询?对象本身在 aspnetcore 的主表上引用了外键?

开发过程中遇到有没有办法在主键 id 下列出对象的查询?对象本身在 aspnetcore 的主表上引用了外键的问题如何解决?下面主要结合日常开发的经验,给出你关于有没有办法在主键 id 下列出对象的查询?对象本身在 aspnetcore 的主表上引用了外键的解决方法建议,希望对你解决有没有办法在主键 id 下列出对象的查询?对象本身在 aspnetcore 的主表上引用了外键有所启发或帮助;

我有两个两个表“卖家和车辆表”,我想获取卖家创建的车辆列表。卖家表有主键 ID 和对车辆“VehiclEID”的外键引用,卖家通过卖家 ID 应该能够获得自己创建的车辆列表。 我的意思是卖家应该得到他/她创建的车辆列表。

请检查我在 SellerRepository 中尝试过的代码

这是卖家表

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.scheR_524_11845@a;
using System.linq;
using System.Text;
using System.Threading.Tasks;

namespace Models
{
    public class Seller
    {
        public int id { get; set; }
        [required]
        public int VehiclEID { get; set; }
        [ForeignKey("VehiclEID")]
        public Vehicle Vehicle { get; set; }
        public String name { get; set; }
        public String title { get; set; }
        [EmailAddress(Errormessage = "InvalID Email ID")]
        [StringLength(50)]
        public String SellerEmail { get; set; }
        public int age { get; set; }
        public String Sex { get; set; }
        public String Company { get; set; }
        public String Address { get; set; }
        public int SellerPhone { get; set; }
        public String City { get; set; }
        public String Country { get; set; }
        public int PhoneNo2 { get; set; }
        public String PostalCode { get; set; }
        [display(name = "Profile Image")]
        [StringLength(100)]
        public String ProfileImagePath { get; set; }

    }
}

这是车辆表

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.linq;
using System.Threading.Tasks;
using Utility.Extensions;

namespace Models
{
    public class Vehicle
    {
        
        public int id { get; set; }
        public Make Make { get; set; }
        [RegularExpression("^[1-9]*$",Errormessage = "SELEct Make")]
        public int MakEID { get; set; }
        public Model Model { get; set; }
        [RegularExpression("^[1-9]*$",Errormessage = "SELEct Model")]
        public int modelID { get; set; }
        [required(Errormessage = "ProvIDe Year")]        
        [YearRangeTillDate(2000,Errormessage = "Not with in the valID Year range")]
        public int Year { get; set; }

        [required(Errormessage = "Enter Mileage")]
        [Range(1,int.MaxValue,Errormessage ="Not with in the valID mileage range")]
        public int Mileage { get; set; }

        
        public String Features { get; set; }

        [required(Errormessage ="ProvIDe Seller name")]
        [StringLength(50)]
        public String Sellername { get; set; }

        [EmailAddress(Errormessage ="InvalID Email ID")]
        [StringLength(50)]
        public Seller SellerEmail { get; set; }

        [required(Errormessage = "ProvIDe Phone No.")]
        [Phone]
        [StringLength(15)]
        public Seller SellerPhone { get; set; }
        [required(Errormessage = "ProvIDe Price")]
         [Range(1,999999999,Errormessage = "Not with in the valID price range")]
        public int Price { get; set; }
        [required]
        [StringLength(10)]
        [RegularExpression("^[a-zA-Z]*$",Errormessage ="SELEct Currency")]       
        public String Currency { get; set; }

        [display(name ="Image file")]
        [StringLength(100)]
        public String ImagePath { get; set; }

    }
}

ISellerRepository。

using Microsoft.AspNetCore.Mvc.Rendering;
using Models;
using System;
using System.Collections.Generic;
using System.linq;
using System.Text;
using System.Threading.Tasks;

namespace Persistence.Repository.IRepository
{
    public interface ISellerRepository : IRepository<Seller>
    {
        IEnumerable<SELEctListItem> GetModelListForDropDown();
       // voID update(Seller model);
        Task<bool> SellerOwnsvehicleAsync(int sellerID,int vehiclEID);

    }
}

SellerRepository 获取卖家创建的车辆列表

using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Models;
using Persistence.Repository.IRepository;
using System;
using System.Collections.Generic;
using System.linq;
using System.Text;
using System.Threading.Tasks;

namespace Persistence.Repository
{
    public class SellerRepository : Repository<Seller>,ISellerRepository
    {
        private Readonly autoServDbContext _db;
        public SellerRepository(autoServDbContext db) : base (db)
        {
            _db = db;
        }
        public IEnumerable<SELEctListItem> GetModelListForDropDown()
        {
            return _db.Sellers.SELEct(i => new SELEctListItem()
            {
                Text = i.name,Value = i.ID.ToString()
            });
        }

        public async Task<bool> SellerOwnsvehicleAsync(int sellerID,int vehiclEID)
        {
            var seller = await _db.Sellers.AsnoTracking().SingLeorDefaultAsync(x => x.ID ==     sellerID);

            if (seller == null)
            {
                return false;
            }

            if (seller.VehiclEID != vehiclEID)
            {
                return false;
            }

            return true;
        }
    }
}

解决方法

看看您的模型,Seller 有一个 Vehicle 导航属性,但 Vehicle 有两个导航属性,它们链接回可能不同 {{1 }} 记录:SellerSellerEmail

卖家通过sellerid应该可以得到自己创建的车辆列表

您的请求指出给定的 SellerPhone 可以有多个 Seller 记录,但您的模型不允许这样做。

您当前的 Vehicle 模型类似于 Vehicle Create 或 SumMary DTO,但不一定将数据实际存储在数据库或存储库中的方式。结构本身不是无效的,但它不代表数据存储的范式

第一步,改变你模型中的关系,从Vehicle中取出VehiclEIDVehicle,将其替换为一个集合属性:
注意:我省略了可以保持不变的属性

Seller

然后在 public class Seller { public int id { get; set; } //[required] //public int VehiclEID { get; set; } //[ForeignKey("VehiclEID")] //public Vehicle Vehicle { get; set; } public ICollection<Vehicle> Vehicles { get; set; } = new HashSet<Vehicle>(); ... } 中进行反向更改,提供返回 Vehicle 的链接。在这个修改后模型中,每个 Seller 可以有一个 Vehicle

Seller

然后我们可以从 public class Vehicle { public int id { get; set; } public Make Make { get; set; } [RegularExpression("^[1-9]*$",Errormessage = "SELEct Make")] public int MakEID { get; set; } public Model Model { get; set; } [RegularExpression("^[1-9]*$",Errormessage = "SELEct Model")] public int modelID { get; set; } [required(Errormessage = "Provide Year")] [YearRangeTillDate(2000,Errormessage = "Not with in the valid Year range")] public int Year { get; set; } [required(Errormessage = "Enter Mileage")] [Range(1,int.MaxValue,Errormessage ="Not with in the valid mileage range")] public int Mileage { get; set; } public String Features { get; set; } // Question: is this necessary,now that we have a Seller //[required(Errormessage ="Provide Seller Name")] //[StringLength(50)] //public String SellerName { get; set; } // Removing,no longer relevant //[EmailAddress(Errormessage ="Invalid Email ID")] //[StringLength(50)] //public Seller SellerEmail { get; set; } // Removing,no longer relevant //[required(Errormessage = "Provide Phone No.")] //[Phone] //[StringLength(15)] //public Seller SellerPhone { get; set; } public Seller Seller { get; set} [required(Errormessage = "Provide Seller")] public int SellerID { get; set} [required(Errormessage = "Provide Price")] [Range(1,999999999,Errormessage = "Not with in the valid price range")] public int Price { get; set; } [required] [StringLength(10)] [RegularExpression("^[a-zA-Z]*$",Errormessage ="SELEct Currency")] public String Currency { get; set; } [Display(Name ="Image File")] [StringLength(100)] public String ImagePath { get; set; } } 中将车辆公开为它们自己的端点:

SellerRepository

或者您可以向 public IQueryable<Vehicle> VehiclesAsync(int sellerId) { var vehicles = _db.Vehicles.AsnoTracking().Where(x => x.SellerId == sellerId); return vehicles; } 添加一个类似的端点:

VehicleRespository

使用这个新结构,来自 public async IQueryable<Vehicle> BySellerAsync(int sellerId) { var vehicles = _db.Vehicles.AsnoTracking().Where(x => x.SellerId == sellerId); return vehicles; } DbSet 的反向过滤器也可以工作:

_db.Sellers

如果您想支持 _db.Sellers.Where(s => s.Id == sellerId).SELEctMany(s => s.Vehicles); Seller 之间存在 M:N 关系的模型,那么也可以实现,这将允许 Vehicle 具有多个所有者,可能会建议为每个所有者记录定义一段时间,但这将涉及一个额外的表来管理关系。

大佬总结

以上是大佬教程为你收集整理的有没有办法在主键 id 下列出对象的查询?对象本身在 aspnetcore 的主表上引用了外键全部内容,希望文章能够帮你解决有没有办法在主键 id 下列出对象的查询?对象本身在 aspnetcore 的主表上引用了外键所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。