好的,我已经看到了这个问题Entity Framework: Generate Database From Models 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 代码,那么也欢迎。