0

我是所有实体框架模型和数据绑定的新手。我创建了一个接口并从Candidate数据库中的表生成了一个模型类。

public interface ICandidate
{
    String ID { get; set; }
    string Name { get; set; }
    string Mail { get; set; }
}

我为生成的Candidate模型创建了一个部分类,因此我将能够在ICandidate不更改任何生成代码的情况下实现接口。

public partial class Candidates : ICandidate
{
    string ICandidate.ID
    {
        get { return this.PK; }
        set { _PK = value; }
    }
    string ICandidate.Name
    {
        get{ return this._Name; }
        set { _Name = value; }
    }
    string ICandidate.Mail
    {
        get { return this._Email; }
        set { this._Email = value; }
    }
}

当然,生成的类比接口有更多的属性(比如接口不需要的 IsDeleted 字段)。

我想在DataGridView数据库中显示所有候选人。但我希望只有接口的属性将显示为DataGridView.

  1. 有没有办法只绑定DataGridView的接口属性?
  2. 在我的数据库中有一个名为 Candidate_To_Company 的表,其中包含以下列:PK、Candidate_FK、Company_FK、Insertion_Date 我想将此表绑定到 DataGridView。但我不想显示Candidate_FK,而是显示ICandidate 的候选人姓名。这可能吗?
4

2 回答 2

0

DataGrid 是否需要绑定到接口?界面让DataGrid只显示你想要的数据的原因是什么?..

您可以做的是让 DataGrid 绑定到 DataTable(通过 SqlDataAdapter 填充)。从那里,您可以指定要绑定的数据库列,并根据需要重命名 DataGrid 的列标题。

请参阅http://www.codeproject.com/Tips/362436/Data-binding-in-WPF-DataGrid-control

于 2012-12-05T23:15:17.347 回答
0

有没有办法只绑定DataGridView的接口属性?

几个选项:

  1. 显式设置列,DataGridView而不是让它们自动生成。根据我的经验,我通常从自动生成的列开始,然后找到一些需要明确设置列的原因(格式、顺序等)
  2. 创建一个仅具有这些属性的模型类,然后手动或使用AutoMapper 之类的工具将实体类转换为该模型。

在我的数据库中有一个名为 Candidate_To_Company 的表......我想显示 ICandidate 的候选人姓名。这可能吗?

由于您有除外键以外的列,因此 EF 不会将其映射为多对多关系并为您设置导航属性,因为您添加了 PK(这是​​不必要的恕我直言)并且InsertDate在您的模型中将不可用.

同样,有几个选项:

  1. 如果您为问题 1 创建了单独的模型,请在模型中设置导航属性,并通过中间表从实体模型映射到视图模型:

    Company.Candidates = efCompany.Candidate_to_Companies.Select(cc=>cc.Candidate).ToList();

  2. 弄清楚如何告诉模型将中间表用作多对多中间表而不是它自己的实体。这假设数据库通过触发器和/或 IDENTITY 列自动填充这些列,因此不需要在实体模型中包含它们。

  3. 删除 PK 和 InsertionDate 列,生成模型,然后添加额外的列。这实际上有点骇人听闻,如果您需要重新生成模型,可能会给您带来问题。我只是把它作为一个实验来看看如何做#2。
于 2012-12-05T23:13:06.573 回答