簡體   English   中英

連接字符串和多個項目?

[英]Connection strings and multiple projects?

我的項目(使用Web api和EF6和localdb)的結構如下:

項目:

LM.Api <-是一個Web API項目

LM.Console <-是一個控制台項目

LM.DataAccess <-是一個包含模型,數據上下文和存儲庫的類庫(LM.Api和LM.Console引用此項目)

我的問題是:

我將如何為同時使用的LM.Api和LM.Console創建一個通用數據庫?

我在LM.DataAccess中放置了一個包含連接字符串的靜態字符串。 LM.Api和LM.Console均獲取此文件並將其保存在各自的web.config / app.config文件中。

這是正確的方法嗎? 當我從任何一個項目訪問存儲庫時,都會出現異常:

The underlying provider failed on Open

另外,我假設.mdf文件應該放在LM.DataAccess項目中,所以我應該為該項目啟用遷移,對嗎?

您絕對應該設計解決方案,以便只有LM.DataAccess項目才需要連接字符串和數據庫的任何特定知識。 這可以通過抽象出對存儲庫接口的數據訪問來實現。 這些接口是應用程序業務邏輯的一部分,因此應在LM.Api(或實際上是LM.BusinessLogic項目)中聲明它們,因為您可能還希望從其他項目中訪問業務邏輯。

但是(這很重要)在LM.DataAccess項目中聲明了存儲庫實現。 因此,在LM.BusinessLogic中,您具有以下接口:

interface ICustomerRepository
{
    void Insert(Customer customer);
    void Update(Customer customer);
    void Delete(int customerId);   
}

業務邏輯的所有其他部分僅在訪問客戶數據時與此接口通信。

在LM.DataAccess中,您具有具體的實現:

public class CustomerRepository : ICustomerRepository
{
    public void Insert(Customer customer)
    {
        using (var db = new DatabaseContext())
        {
            db.Customers.Add(customer);
            db.SaveChanges();
        }    
    }

    ... and so on
}

然后是將接口和實現綁定在一起的棘手部分。 您不能在兩個方向上都具有引用,並且由於LM.DataAccess必須具有對LM.BusinessLogic的引用(它實現了在那里聲明的存儲庫接口),因此克服此問題的最簡單方法是將它們捆綁在一個單獨的項目中,該項目可以是兩者都依賴。 我想您的情況就是LM.Api項目。 也許還有LM.Console項目?

我總是使用Inversion of control-container通過構造函數注入提供所需的接口,因為它使事情變得容易得多。 (我最喜歡Autofac ,但還有其他幾個)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM