none
请教如何生成 LINQ to Entity 实体类的注释 RRS feed

  • 问题

  • 我通过VS2008新建了一个项目,添加一个新建项“ADO.NET Entity Data Model ”,选择“从数据库生成”,连接的是SQL Server 2005的数据库,点击完成后生成了一个“Model1.edmx”文件。我打开对应的“Model1.designer.cs”文件后,发现生成的映射类中的属性都没有注释,提示“架构中不存在属性 xxx 的注释。”代码如下:

            /// <summary>
            /// 架构中不存在属性 fWarehouseName 的注释。
            /// </summary>
            [global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]
            [global::System.Runtime.Serialization.DataMemberAttribute()]
            public string fWarehouseName
            {
                get
                {
                    return this._fWarehouseName;
                }
                set
                {
                    this.OnfWarehouseNameChanging(value);
                    this.ReportPropertyChanging("fWarehouseName");
                    this._fWarehouseName = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, true);
                    this.ReportPropertyChanged("fWarehouseName");
                    this.OnfWarehouseNameChanged();
                }
            }
            private string _fWarehouseName;
            partial void OnfWarehouseNameChanging(string value);
            partial void OnfWarehouseNameChanged();

            /// <summary>
            /// 架构中不存在属性 fIsActive 的注释。
            /// </summary>
            [global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)]
            [global::System.Runtime.Serialization.DataMemberAttribute()]
            public bool fIsActive
            {
                get
                {
                    return this._fIsActive;
                }
                set
                {
                    this.OnfIsActiveChanging(value);
                    this.ReportPropertyChanging("fIsActive");
                    this._fIsActive = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value);
                    this.ReportPropertyChanged("fIsActive");
                    this.OnfIsActiveChanged();
                }
            }
            private bool _fIsActive;
            partial void OnfIsActiveChanging(bool value);
            partial void OnfIsActiveChanged();

    但实际上在我的SQL Server2005数据库中,这些字段都是有说明的,难道通过SQLServer数据库生成的映射类不会自动把数据库的字段说明转成实体类的属性说明?
    请问有什么办法可以做到吗?非常感谢!
    2009年4月10日 6:13

答案

  • 难道通过SQLServer数据库生成的映射类不会自动把数据库的字段说明转成实体类的属性说明?

    没有错。。 

         /// <summary>
            /// 架构中不存在属性 fIsActive 的注释。
            /// </summary>
    表示系统给你留出了空位  要你自己输入

    就好像  vc++生成代码里面的

    //TODO:*@&#(*!@&#(*@!#
    工作突然有点忙 嘿嘿
    2009年4月10日 14:57

全部回复

  • 难道通过SQLServer数据库生成的映射类不会自动把数据库的字段说明转成实体类的属性说明?

    没有错。。 

         /// <summary>
            /// 架构中不存在属性 fIsActive 的注释。
            /// </summary>
    表示系统给你留出了空位  要你自己输入

    就好像  vc++生成代码里面的

    //TODO:*@&#(*!@&#(*@!#
    工作突然有点忙 嘿嘿
    2009年4月10日 14:57
  • 谢谢韦恩卑鄙的回复,但是我在数据库中已经填写了字段说明,生成实体类时应该可以直接取数据库中的字段说明作为实体类属性的注释吧?
    我现在是通过Visio for Enterprise Architects来创建数据库模型图,然后正向生成SQLServer的数据表,再由数据表生成实体类。

    这个过程发现了两个问题:
    1、Visio生成数据表时,Visio中填写的字段说明带不到SQLServer数据库中;
    2、SQLServer数据表生成实体类时,数据表的字段说明又带不到实体类中;

    结果现在我要先在Visio中写一遍注释,生成数据表后,又要在SQLServer数据库中重写一遍注释,生成实体类后,还要在VS2008中再重写一遍注释,都是Microsoft的开发工具,同样的注释却要写三遍,很浪费精力,不知各位是否有碰到类似情况,有什么好方法可以解决,谢谢。
    2009年4月13日 1:33
  • 1 VISIO的uml基本上已经被m$唾弃了  uml 很难跟得上m$新技术特征   Visio数据库设计也要照顾很多数据库  不是所有数据库都支持这一类注释
    2 sqlserver 是一个数据库引擎  他的说明是描述字段的 
       EF是一个实体引擎  他的说明是描述实体成员的
       在通常的使用状况中   这两者并没有必然的一一对应关系   
       他们注释的意义  阅读者也都完全不同  所以也并不建议自动生成注释







    工作突然有点忙 嘿嘿
    • 已标记为答案 cxy 2009年4月13日 6:26
    • 取消答案标记 cxy 2009年4月13日 6:27
    2009年4月13日 5:43
  • 1 VISIO的uml基本上已经被m$唾弃了  uml 很难跟得上m$新技术特征   Visio数据库设计也要照顾很多数据库  不是所有数据库都支持这一类注释
    2 sqlserver 是一个数据库引擎  他的说明是描述字段的 
       EF是一个实体引擎  他的说明是描述实体成员的
       在通常的使用状况中   这两者并没有必然的一一对应关系   
       他们注释的意义  阅读者也都完全不同  所以也并不建议自动生成注释


    我同意你的观点,visio的确是跟不上ms的新技术,而且Microsoft Office Visio for Enterprise Architects只是在VS2005中附带的一个版本,在一般的Office2003中都没有这个版本的visio,在最新的Office2007中好像也没有企业架构版。只是因为我之前一直都是用ms的工具做开发,个人不是太习惯用powerdesigner来设计数据库,不知visio被唾弃后,ms有什么新的数据库设计工具吗?

    关于EF,我的想法是,如果实体类是我直接在VS2008中手工创建的,那么毫无疑问,所有实体属性的注释我也必须手工输入,但既然EDM工具支持直接连接SQLServer数据库自动生成映射类,那此时的映射类和数据表的对应关系还是比较单纯的,而且两个都是ms自己的产品,自动帮我填上注释的确可以省掉不少工作量。你的解释没错,LINQ to Entity和之前的LINQ to SQL不同,他要支持所有数据库,不同数据库的字段注释可能方式都不同,所以不可能自动把注释带出来。或许我该考虑自己写个生成器。谢谢。
    2009年4月13日 6:26