Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF ComplexType字段顺序_C#_Winforms_Entity Framework_Datagridview - Fatal编程技术网

C# EF ComplexType字段顺序

C# EF ComplexType字段顺序,c#,winforms,entity-framework,datagridview,C#,Winforms,Entity Framework,Datagridview,我开始在EF中使用C#我正在做一个示例,在这个示例中,我只执行一个SP,需要检索到DataGridView 我添加了SP并创建了一个复杂类型,我的SP如下所示 select ProductId, ProductName, S.SupplierID, S.CompanyName, C.CategoryID, C.CategoryName, UnitPrice from dbo.Products P inner join Suppliers S on S.SupplierID = P

我开始在EF中使用C#我正在做一个示例,在这个示例中,我只执行一个SP,需要检索到DataGridView

我添加了SP并创建了一个复杂类型,我的SP如下所示

select ProductId, ProductName, S.SupplierID, S.CompanyName, 
       C.CategoryID, C.CategoryName, UnitPrice
from dbo.Products P
inner join Suppliers S on S.SupplierID = P.SupplierID
inner join Categories C on C.CategoryID = P.CategoryID
但是,当我将数据检索到DataGridView时,复杂类型以不同的顺序显示结果,实际上它是这样显示的

ProductName, SupplierID, CategoryID (...)

因此,我想知道是否有机会修改complexType并以与SP相同的顺序获得输出?

在Entity Framework中创建并映射类型:

class Product
{
    public Guid ProductId { get; set; }
    public string ProductName { get; set; }
    public double UnitPrice { get; set; }
    public Supplier Supplier { get; set; }
    public Category Category { get; set; }
}

class Supplier
{
    public Guid SupplierID { get; set; }
    public string SupplierName { get; set; }
}

class Category 
{
    public Guid CategoryID { get; set; }
    public string CategoryName { get; set; }
}
然后查询您的数据库:

var q = from p in db.Products
        select new
        {
            p.ProductId, p.ProductName, p.UnitPrice,
            p.Supplier.SupplierID, p.Supplier.CompanyName, 
            p.Category.CategoryID, p.Category.CategoryName, 
        };
然后将其绑定到控件上:

dataGridView.DataSource = q.ToArray();

如果使用EF,为什么需要存储过程?直接从LINQ查询数据库到实体。我想可能是因为在我的工作(银行)中,我们仍然使用SP,因为内部安全策略我们不能只在代码中编写数据库逻辑。谢谢你的建议,但这不是我想要的。好的,然后映射存储的过程输出或创建一个视图(如果允许的话)。看,不管怎么说,愚蠢的政策,安全“工程师”的专业发展使这个决定在1998年的某个地方停止了,你也可能想尝试另一个ORM,例如,因为使用EF和SP,你失去了它的大部分功能。