C# EF从模型生成数据库删除函数导入

C# EF从模型生成数据库删除函数导入,c#,sql-server,entity-framework,tsql,ef-model-first,C#,Sql Server,Entity Framework,Tsql,Ef Model First,好的,我看到了这个问题,但我认为这个问题没有解决。我有一些功能,我需要在SQL Server上运行,以进行筛选。我无法在.NET中编写该代码,所以我只是将该函数作为函数在SQL Server中编写。我首先使用模型,但我需要SQL级别的函数,并且我使用从数据库更新模型选项来导入该函数。但当我在实体设计器中进行更改并从模型生成数据库时,函数映射被删除。我知道我不应该同时使用model first和db first,但我该如何解决我的问题呢?我有一段无法用C#编写的代码,我需要在LINQ查询中使用它。

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

这是我的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代码,也欢迎使用。

您阅读了链接问题中的答案了吗?没有什么需要解决的。设计者根本不支持它。数据库优先和模型优先的方法是互斥的。您可以在第二个阶段使用其中一个,但将它们结合起来并不是使用设计器的工作流

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

%VSINSTALLDIR%\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\TablePerTypeStrategy.xaml
您需要用自己的活动替换第一个活动,这将在生成后将函数导入到SSDL中。您还可以尝试使用它,它为数据库生成提供了更多功能,在这些功能中,它有T4模板用于生成SSDL,其中硬编码功能导入应该比创建工作流活动容易得多

最后,你们可以花一些钱买一个工具,它可以让你们比标准设计师提供的更神奇。你可以试一下它的试用版

顺便问一下,你为什么要先用模型?“模型优先”和“代码优先”适用于这样的场景:您不必为自己生成的蹩脚数据库而烦恼,数据库中最复杂的逻辑是自动生成的id


在我看来,model first或code first并不适用于一个真正的应用程序,在这个应用程序中,您需要的不仅仅是数据量小、流量小、数据库中完全没有逻辑的哑数据持久性。是的,您的场景超出了model first的范围=您使用了MS designer不期望的错误工作流。

我不是数据库专家,请原谅我说的不正确。无论如何,我讨厌处理数据库和SQL,我想远离它,躲在抽象障碍后面,实体框架的模型优先对我来说很好。我知道如果我先使用db,它可能会更有效率,但我真的不喜欢使用SQL,而且它不是一个非常大的性能关键型业务项目。我已经安装了电源组,但我真的不知道该怎么办。在“从模型生成数据库”中,会出现一个新对话框,但我不知道在那里设置或更改什么。