2011-08-06 104 views
1

好的我已經看到這個問題Entity Framework: Generate Database From Model removes Stored Procedures from Model Store但我不認爲這是解決。我有一些功能,我需要在SQL Server中運行以進行篩選。我無法在.NET中編寫該代碼,因此我只是將該函數作爲函數編寫在SQL Server中。我使用的是模型優先,但是我需要SQL級別的函數,並且我使用數據庫更新模型選項來導入函數。但是,當我在Entity Designer中進行更改並從模型生成數據庫時,函數映射將被刪除。我知道我不應該同時使用model-first和db-first,但是我怎麼才能解決我的問題呢?我有這樣的代碼,我不能用C#編寫,我需要在我的LINQ查詢中使用它。當我創建一個導入並創建帶有映射到數據庫函數的EdmFunction屬性的C#方法時,它確實工作,但是如何使它持久化,以便我的模型和SQL函數之間的鏈接在更新時保留?編寫可以在LINQ-to-Entities中翻譯唯一選項的函數?EF從模型生成數據庫刪除功能導入

這裏是我的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代碼,那麼也歡迎您。

回答

0

您是否閱讀過鏈接問題的答案?沒有什麼可以解決的。它根本不受設計者的支持。數據庫第一和模型第一種方法是獨佔的。您可以使用第二種方法,但將它們結合使用並不是假定使用設計器的工作流程。

你可以做什麼?您可以編寫自己的數據庫生成的工作流程爲 - 你會發現這裏的默認工作流程:

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

你需要用自己更換的第一個活動,將把你的功能導入到SSDL後一代。您也可以嘗試使用Database generation power pack,它爲數據庫生成提供了更多的功能,在這些功能中,它具有用於SSDL生成的T4模板,其中硬編碼功能導入應該比創建工作流活動容易得多。

最後,這樣你可以花一些錢,買一個工具,它可以讓你做更多的魔術那麼標準的設計師提供您。您可以嘗試使用Huagati EDMX tools及其model comparer

Btw。你爲什麼首先使用模型?模型優先和代碼優先適用於您不需要爲您生成蹩腳數據庫,以及數據庫中最複雜的邏輯是自動生成的編號的情況。

在我看來模型第一或代碼首先是不適合,你期望與數據量小,小流量,並在數據庫中絕對沒有任何的邏輯更多然後啞數據持久性的實際應用。是的,您的方案超出了模型的範圍 - 您正在使用錯誤的工作流程,這是MS設計人員所不期望的。

+0

我不是數據庫專家,所以原諒我,如果我說錯了什麼。無論如何,我討厭處理數據庫和SQL,並且我想遠離它,在一個抽象障礙的背後,而Entity Framework的模型首先對我很有好處。我知道,如果我以db-first爲例,它可能會更有效率,但我真的不喜歡使用SQL,它不是一個非常重要的性能關鍵業務項目。我已經安裝了電源組,但我不知道該怎麼做。在從模型生成數據庫中,會出現一個新的對話框,但我不知道該在哪裏設置或更改。 –

相關問題