更改数据库中的列名并在.edmx模型中保留ComponentModel DisplayNames

时间:2014-09-26 13:31:45

标签: c# asp.net entity-framework ado.net

所以我用大约七个表创建了一个小关系数据库,并且我使用其中一些来制作表单。所以我创建了一个ADO.NET实体数据模型来绘制表单并根据表生成类。现在我想给类属性DisplayNames(使用System.ComponentModel)。表格也变得相当大,而且还有很多DisplayNames。

public partial class ParticularForm
{
    public System.Guid ParticularForm1 { get; set; }
    public System.Guid GeneralFormFieldsID { get; set; }

    #region Particular Form

    [DisplayName("What's your name?")]
    public string Name { get; set; }

    [DisplayName("How many friends do you have?")]
    public Nullable<byte> FriendsAmount { get; set; }
    // (etc...)

的Ack!所以看起来ADO.NET实体数据模型给其中一个列的名称不正确:&#34; ParticularForm1&#34;应该被称为&#34; ParticularFormID&#34;。所以我进入数据库,重命名&#34; ParticularForm&#34;列到&#34; ParticularFormID&#34;。现在我想更新脚手架Form.tt类中对ParticularForm1的引用,将名称更改为名称ParticularFormID。所以这就是我的所作所为:

  • 我进入Form.edmx图并点击Update Model from Database。它不允许我刷新单个表,它会立即刷新所有这些表。然后我保存,现在.edmx模型正确显示&#34; ParticularFormID&#34;柱。但它仍然显示出奇怪的&#34; ParticularForm1&#34;专栏,除此之外,我丢失了100个显示名称。

所以我撤消了TFS中的待定更改,我采用了一种新的方法。

public partial class ParticularForm
{
    public System.Guid ParticularFormID { get; set; }
  • 我回到了Form.tt&gt; ParticularForm.cs并将属性的名称从ParticularForm1更改为ParticularFormID。然后我回到Designer并保存更改。我收到了消息:

    This file has been modified outside of the source editor. Do you want to reload it?

不确定。然后我再次获得除了我更改的唯一一个表。每次单击No时,都不会进行任何更改,但TFS仍然说有待更改。当我单击Yes for ParticularForm.cs时,其所有DisplayNames都将被删除 ,并且.cs文件将恢复为ADO.NET选择的先前命名约定,并取消我的更改

我希望保留我已经完成的与DisplayNames相关的工作,但更改单个列名而不会丢失我的所有工作。关于发生了什么的任何想法?为什么ADO.NET实体数据模型不尊重我?

1 个答案:

答案 0 :(得分:0)

答案结果是应该hold the data annotations in a MetadataType class。不仅仅是[DisplayName()],还有一切。

我的部分问题是我没有读到这个:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    **Manual changes to this file will be overwritten if the code is regenerated.**
// </auto-generated>
//------------------------------------------------------------------------------