【问题标题】:EF Generate Database from Model Deletes Function ImportsEF 从模型生成数据库删除函数导入
【发布时间】:2011-08-06 12:19:25
【问题描述】:

好的,我已经看到了这个问题Entity Framework: Generate Database From Model removes Stored Procedures from Model Store,但我认为这还没有解决。我有一些功能需要在 SQL Server 上运行以进行筛选。我无法在 .NET 中编写该代码,所以我只是在 SQL Server 中将该函数编写为函数。我使用的是模型优先,但我需要在 SQL 级别使用该函数,并且我使用数据库选项中的更新模型来导入该函数。但是当我在实体设计器中进行更改并从模型生成数据库时,函数映射被删除。我知道我不应该同时使用模型优先和数据库优先,但是我该如何解决我的问题呢?我有这段无法用 C# 编写的代码,我在 LINQ 查询中需要它。当我创建导入并使用映射到数据库中的函数的 EdmFunction 属性创建 C# 方法时,它确实有效,但是如何使其持久化,以便在更新时保留我的模型和我的 SQL 函数之间的链接?编写可以在 LINQ-to-Entities 中转换的函数是唯一的选择吗?

这是我的 SQL 函数

    create function [dbo].[HammingDistance]
    (@first bigint, @second bigint) returns int
    as
    begin
        declare @xor bigint = @first ^ @second;
        declare @one bigint = 1;
        declare @diff int = 0;
        declare @and bigint;
        while (@xor != 0)
            begin
            set @and = @xor & @one;
            if(@and = @one)
                begin
                set @diff = @diff + 1;
                end
            set @xor = @xor / 2;
            end
        return @diff;
    end

(我不是SQL专家,这可能不是最好的方法,所以如果有更好的方法,请纠正我)

我需要它在数据库中运行,而不需要从数据库中将任何内容导入 ASP.NET。如果您有办法将此代码转换为 C# 并在 LINQ-to-Entities 中转换为 SQL 代码,也欢迎。

【问题讨论】:

    标签: c# sql-server entity-framework tsql ef-model-first


    【解决方案1】:

    您是否阅读了链接问题中的答案?没有什么需要解决的。设计师根本不支持。数据库优先和模型优先方法是互斥的。您可以每秒使用其中任何一个,但将它们组合起来并不是使用设计器的工作流程。

    你能做什么?您可以为此编写自己的数据库生成工作流程 - 您将在此处找到默认工作流程:

    %VSINSTALLDIR%\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\TablePerTypeStrategy.xaml
    

    您需要将第一个活动替换为您自己的活动,这将在生成后将您的函数导入放入 SSDL。您也可以尝试使用Database generation power pack,它为数据库生成提供了更多功能,在这些功能中,它具有用于 SSDL 生成的 T4 模板,其中硬编码函数导入应该比创建工作流活动更容易。

    最后,您可以花一些钱购买一种工具,该工具可以让您发挥比标准设计师提供的更多的魔力。您可以尝试试用Huagati EDMX tools 及其model comparer

    顺便说一句。你为什么先使用模型?模型优先和代码优先适用于您不必为为您生成的糟糕数据库而烦恼以及数据库中最复杂的逻辑是自动生成的 id 的场景。

    在我看来,模型优先或代码优先不适用于真正的应用程序,在这种应用程序中,您期望的只是数据量少、流量小且数据库中绝对没有逻辑的愚蠢数据持久性。是的,您的场景超出了模型优先的范围 = 您使用了 MS 设计人员不期望的错误工作流。

    【讨论】:

    • 我不是数据库专家,如果我说的不正确,请见谅。无论如何,我讨厌处理数据库和 SQL,我想远离它,在抽象障碍后面,Entity Framework 的模型首先对我有好处。我知道如果我先使用 db,它可能会更有效率,但我真的不喜欢使用 SQL,而且它不是一个非常大的性能关键业务项目。我已经安装了电源组,但我真的不知道该怎么做。在从模型生成数据库中,会出现一个新对话框,但我不知道在那里设置或更改什么。
    猜你喜欢
    • 2021-04-13
    • 2012-07-01
    • 2013-06-17
    • 1970-01-01
    • 2018-12-12
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多