【问题标题】:Entity Framework 4.0 Use Database Default ValueEntity Framework 4.0 使用数据库默认值
【发布时间】:2013-05-16 19:11:03
【问题描述】:

我正在使用 Entity Framework 4.0

我们的许多表都有一个名为 RowID 的列,DBA 使用它来跟踪数据。该列是 NON NULLABLE 具有映射到函数的数据库默认值。

问题是,EDMX 模型要求该属性在实体上具有值,这使得对象的构造变得困难。

我已经阅读了许多关于手动调整 EDMX 和 SSDL 文件以使其工作的帖子。这对我们的团队来说是不可行的。

除了将数据库中的列设为 NULLABLE 之外,是否有更好的解决方案来解决这个问题?我不关心取回值,我只希望数据库能够自行设置它。

【问题讨论】:

    标签: .net entity-framework


    【解决方案1】:

    您应该直接在 SSDL(模型后面的 XML)中设置 StoreGeneratedPattern = "Computed"。

    1 - 右键单击​​模型

    2 - 选择“打开方式”=> Xml 编辑器

    3 - 在“模型内容”部分下查找其中一个表的映射

    4 - 将 StoreGeneratedPattern = "Computed" 属性添加到 RowID 列

    5 - 对您的文件进行全局替换,以便每个表都有带有 StoreGeneratedPattern="Computed" 的 RowID 定义

    注意: 如果您使用更新模型向导,您将需要再次手动更新 XML。我的建议:不要使用向导或将原始和更改的 xml 行保存到单独的文本文件中,以便在运行向导后将它们用于全局替换。

    更多信息请参考这篇文章: http://msdn.microsoft.com/en-us/library/dd296755(v=vs.90).aspx

    【讨论】:

    • 我使用的是 Entity Framework 5,当我设置 StoreGeneratedPattern=Computed 然后使用“从数据库更新模型...”向导时,该字段重置.
    【解决方案2】:

    如果 RowID 永远不需要在您的应用程序的上下文中读取或写入,那么它根本不属于您的实体模型。 只需使用设计器将其从实体模型中删除(右键单击 > 删除)并让数据库管理它。

    【讨论】:

    • 问题是 RowID 是其他表上的 FK,所以我需要能够在创建子实体时获取并使用它。
    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多