代码之家  ›  专栏  ›  技术社区  ›  BrianFinkel

实体框架v4:防止更新模型向导覆盖存储模型

  •  7
  • BrianFinkel  · 技术社区  · 14 年前

    在EntityFrameworkV4项目中,我有一个包含两列的表,这两列由数据库(通过触发器等)计算。为了让EF正确地将记录插入表中,我必须在EF存储模型(StoreGeneratedPattern属性)中将列手动标记为“Computed”,这是设计器不支持的,因此我必须手动编辑.EDMX文件中的XML。

    不管怎样,我对蜂巢的问题是。。。有没有办法防止存储模型被覆盖?有没有办法标记数据库中的列,以便EF自动将它们标记为computed?作为最后的手段,是否有一些真正简单的XML工具/技术可以在每次刷新后自动为我应用更改?

    谢谢你,哦,谢谢你减轻我的痛苦,帮助我解决这个问题,即使我还没有在网站上的任何地位。总有一天,当我拥有4位数以上的声誉时,我会记得你。

    布瑞恩


    更新

    一位内部人士告诉我,一种解决方案可能是查看“Designer Power Pack”(下面的链接),它允许您自定义存储模型的生成。到目前为止,我只浏览了一下这些信息,但在我看来,可能需要一两天的学习曲线才能弄清楚这一点。有没有人有任何经验与设计师的电源组,或任何其他想法?

    http://blogs.msdn.com/b/adonet/archive/2010/02/08/entity-designer-database-generation-power-pack.aspx

    再次感谢,

    6 回复  |  直到 14 年前
        1
  •  1
  •   BrianFinkel    14 年前

    据微软的EF团队称,这是他们目前最大的客户投诉,也是他们最优先考虑的bug。

    他们表示,他们已经设计了一个解决方案,并计划在visualstudio的下一个版本(可能是vs2010sp1)中发布,但没有具体日期。

    不幸的是,没有好的解决办法已经从任何来源,但我仍然开放的想法!

    布瑞恩

        2
  •  1
  •   Community Reversed Engineer    7 年前

    对于在这里找到出路的googler来说,这个问题现在可以用分部类解决了。看到了吗 this SO Answer 更多细节。我在片段顶部的评论中引用了@Mugan。

    //The generated class 'MyClass' will always be a partial class. 
    //This allows you to write second partial class which is marked with 
    //the necessary data annotations. 
    
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    
    //make sure the namespace is equal to the other partial class MyClass
    namespace MvcApplication1.Models 
    {
        [MetadataType(typeof(MyClassMetaData))]
        public partial class MyClass
        {
        }
    
        public class MyClassMetaData
        {
            [Required]
            public int MyClassId {get;set;}
    
            //...
        }
    }
    
        3
  •  0
  •   BradBrening    14 年前

        4
  •  0
  •   automatic    14 年前

    可以使用替代设计器(如llblgenprov3.0中的设计器)生成edmx文件。我不知道它对计算列的支持有多好。但是如果你在支持论坛上问 http://www.llblgen.com/tinyforum/ 你会得到一个快速、准确的答案。如果碰巧不支持此功能,他们可能会在即将发布的版本中添加此功能。他们的交货周期比微软的短得多。

        5
  •  0
  •   Community Reversed Engineer    7 年前

    我刚刚发布了一个可以帮助您的工具:EFv4模型的“模型比较器”。它是我的外接程序包的一部分 Huagati DBML/EDMX Tools ,并显示数据库、SSDL和CSDL层之间的差异。您可以选择个别差异并将其带到相反的层,或将不希望带到忽略列表中的差异添加到忽略列表中。

    当改变时,它只更新模型中受影响的部分;不相关和不变的部分保持不变。

    您可以下载它并从 http://huagati.com/dbmltools/ 如果你想试试的话。

    Huagati EDMX Tools Model Comparer for EFv4

        6
  •  0
  •   Radim Köhler    11 年前

    我在应用程序中也遇到了同样的问题,我使用 代码优先方法 . 你也可以用它,我想是设计师sux的大好时机。

    “先反向工程代码” EF Power Tools ,这将帮助您尽快准备好模型。现在你可以根据你的需要或关系改变模型,但缺点是你不能有一个设计师在这种方法你必须改变每件事的手。其实也没那么难。。。