仅绑定接口属性的数据

时间:2012-12-05 22:55:13

标签: c# entity-framework data-binding

我是所有Entity Framework模型和数据绑定的新手。 我创建了一个接口,并从db中的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中显示候选名称。这可能吗?

2 个答案:

答案 0 :(得分:0)

  

是否有办法仅将接口的属性绑定到DataGridView?

几个选项:

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

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

    由于您拥有除外键之外的列,因此EF不会将其映射为多对多关系,并且自您添加的PK(在不必要的IMHO中)和{{1}后为您设置导航属性在你的模型中将无法使用。

    同样,有几个选择:

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

      InsertDate

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

    3. 删除PK和InsertionDate列,生成模型,然后添加额外的列。这实际上有点hackish,如果你需要重新生成模型,可能会给你带来麻烦。我只是做一个实验,看看如何做#2。

答案 1 :(得分:0)

DataGrid是否需要绑定到接口?接口的原因是DataGrid只显示您想要的数据吗?..

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

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