我用SSMS创建了一个数据库。然后我做了整个C#项目并用NuGet安装了EF。我希望EF为我创建所有类和上下文,所以我从数据库中做了Code First,它为我做了。现在,Product
类看起来像这样:
public partial class Product
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Product()
{
Orders = new HashSet<Order>();
}
public int ID { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
public int Type_ID { get; set; }
public decimal Price { get; set; }
public string Descryption { get; set; }
public int Available_amount { get; set; }
public virtual Product_Type Product_Type { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Order> Orders { get; set; }
}
}
问题是,Product
表看起来像这样:
它与Orders
和Product_Type
表有关。现在,当我想获得所有产品并将它们移至dataGridView
时 - 会发生这种情况:
获取产品的代码:
public void GetProducts()
{
using (var db = new SklepContext())
{
var data = db.Products.ToList();
dataGridViewBrowse.DataSource = data;
}
}
效果:
首先它是在我的脸上抛出错误,所以我不得不添加这一行
我的this.Configuration.ProxyCreationEnabled = false;
构造函数中的SklepContext
。
问题是如何才能让它不能读取那些虚拟成员(不知道为什么EF会首先添加它们)或者让EF在没有它们的情况下制作这些类(我不能仅仅通过删除它们来删除它们) Product
类中有2行,所以我的dataGridView
只显示数据库中的值?
答案 0 :(得分:1)
如果你突然说出来,你的头衔会非常误导
在将数据绑定到dataGridView
时,我不想要那两个最后一列
这两列出现在dataGridView
中的原因是因为您直接绑定了模型。
以下是一些替代方案:
1.绑定后删除列。
dataGridView1.Columns.RemoveAt(dataGridView1.Columns.Count - 1);
dataGridView1.Columns.RemoveAt(dataGridView1.Columns.Count - 1);
2.为绑定创建不同的视图模型
public class DataGridViewModel
{
public int ID { get; set; }
public string Name { get; set; }
public int Type_ID { get; set; }
public decimal Price { get; set; }
public string Descryption { get; set; }
public int Available_amount { get; set; }
public DataGridViewModel()
{
}
}
public void GetProducts()
{
using (var db = new SklepContext())
{
var data = db.Products.Select(r => new DataGridViewModel()
{
ID = r.ID,
Name = r.Name,
Type_ID = r.Type_ID,
Price = r.Price,
Descryption = r.Descryption,
Available_amount = r.Available_amount
}).ToList();
dataGridViewBrowse.DataSource = data;
}
}