Stored procedures MCV核心下拉列表存储过程

Stored procedures MCV核心下拉列表存储过程,stored-procedures,drop-down-menu,asp.net-core,Stored Procedures,Drop Down Menu,Asp.net Core,我有一个模型,如下所示: public partial class RoutePartner { public Guid Id { get; set; } [Required] public Guid PartnerId { get; set; } [Required] public string RouteCompany { get; set; } } partnerId来自另一个具有Id和名称的表。我正试图构建我的CRUD表单,以加载合作伙伴列表并

我有一个模型,如下所示:

 public partial class RoutePartner
{
    public Guid Id { get; set; }
    [Required]
    public Guid PartnerId { get; set; }
    [Required]
    public string RouteCompany { get; set; }
}
partnerId来自另一个具有Id和名称的表。我正试图构建我的CRUD表单,以加载合作伙伴列表并使其可用于表单。这是在MVC核心中实现这一点的最佳方法吗?我看到了许多.NET示例,但没有一个是针对CORE的

最后一点是,partner下拉列表应该由存储过程填充

谢谢
Dan

您的类不必与数据库相同。为什么不创建一个名为Partner的类,该类具有parnteId和PartnerName?在RoutePartner类中,您可以使用Partner属性,而不仅仅是ID

Public class SomeViewModel //Used by your view
{
  public RouteParnter {get; set;}
  public ParnterList List<SelectListItem> {get; set;}

public static List<SelectListItem> PopulateDropdown()
    {
        List<SelectListItem> ls = new List<SelectListItem>();
        DataTable someTable = Database.LoadParnters(); // Database is your data layer
        foreach (var row in someTable.Rows)
        {
            ls.Add(new SelectListItem() { Text = row["PartnerName"].ToString();, Value = row["PartnerID"].ToString(); });
        }
        return ls;
    }
}

 public partial class RoutePartner
{
    public Guid Id { get; set; }
    [Required]
    public Partner SomePartner { get; set; }
    [Required]
    public string RouteCompany { get; set; }



  public RouteParnter(Guid id)
     {
    DataRow returnedRow = Database.LoadRouteParnter(id);
     Id = id;
   // Assuming your DataRow returned has all the info you need.
     RouteCompany = row["RouteCompany"];
     SomePartner = new Partner();
     SomePartner.PartnerId = row["PartnerID"]; // cast to guid, just example
     SomePartner.PartnerName = row["PartnerName"].ToString(); 

     }
    }

     public class Partner
    {
        public Guid PartnerId { get; set; }
        public string PartnerName { get; set; }

    }
视图使用的公共类SomeViewModel// { 公共路由通告{get;set;} 公共参数列表{get;set;} 公共静态列表填充下拉列表() { 列表ls=新列表(); DataTable someTable=Database.LoadParnters();//数据库是您的数据层 foreach(someTable.Rows中的变量行) { 添加(新SelectListItem(){Text=row[“PartnerName”].ToString();,Value=row[“PartnerID”].ToString();}); } 返回ls; } } 公共部分类RoutePartner { 公共Guid Id{get;set;} [必需] 公共伙伴SomePartner{get;set;} [必需] 公共字符串RouteCompany{get;set;} 公用路由交换机(Guid id) { DataRow returnedRow=Database.LoadRouteParnter(id); Id=Id; //假设您返回的DataRow包含您需要的所有信息。 RouteCompany=行[“RouteCompany”]; SomePartner=新伙伴(); SomePartner.PartnerId=row[“PartnerId”];//转换为guid,仅举一个例子 SomePartner.PartnerName=行[“PartnerName”].ToString(); } } 公共课伙伴 { 公共Guid PartnerId{get;set;} 公共字符串PartnerName{get;set;} }
我将松散地耦合数据层。您可以使用ADO.NET或任何其他方式与数据库通信。我通常通过创建一个参数化的构造函数(比如获取要加载的ID)来调用数据层。数据层返回DataTable、DataRow、DataSet或自定义对象。在构造函数中,填充RouteParnter对象的值。同样,您也可以在ViewModel中创建一个列表。

我想提供一个关于如何解决此问题的快速更新。我最终为EF创建了一个PartnerContext。创建后,在需要访问列表的控制器中,我将PartnerContext.ToList()放入ViewBag,然后使用ASP帮助程序加载列表

好主意,比我想的要好。如何填充模型RoutePartner?此外,我仍然不知道如何显示合作伙伴作为下拉列表。更新了一点。我没有包括数据层,也没有说明如何使用下拉列表。基本上是从数据层返回数据,加载到实体层,并有一个单独的ViewModel。再次感谢您的帮助。我不理解Database.LoadRoutePartner(id)方法。这是我写的东西,因为数据库类中不存在Database.LoadRoutePartner()。