2012-07-02 35 views
2

我有一個IBankAccount接口,我將傳遞給ApplicationService。帳戶對象(在ApplicationService項目中)所做的更改需要在數據庫中保存。存儲庫使用IBankAccount接口接收更改。我怎樣才能將這些數據保存到數據庫中?這是使用LINQ to SQL實現的。 。通過接口編程保存數據

注:以下是從斯科特http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx 評論「到你的LINQ的接口添加到SQL數據模型類的LINQ to SQL類是局部類 - 這意味着你可以直接添加界面給他們。 「

public class LijosSimpleBankRepository : ILijosBankRepository 
{ 
    public System.Data.Linq.DataContext Context 
    { 
     get; 
     set; 
    } 

    public virtual void UpdateAccount(DomainInterfaces.IBankAccount iBankAcc) 
    { 
     DBML_Project.BankAccount bankAccount; 
    } 

} 



namespace DomainInterfaces 
{ 
public interface IBankAccount 
{ 
    int BankAccountID { get; set; } 
    string AccountType { get; set; } 
    System.Nullable<System.DateTime> OpenedDate { get; set; } 
    string Status { get; set; } 
    System.Nullable<int> AccountOwnerID { get; set; } 
} 

} 

namespace DBML_Project 
{ 
public class FixedBankAccount : BankAccount 
{ 
    //Note: BankAccount already implemnts IBankAccount 
} 

public class SavingsBankAccount : BankAccount 
{ 
    //Note: BankAccount already implemnts IBankAccount 
} 

//The auto generated calss is made as abstract 
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.BankAccount")] 
[InheritanceMapping(Code = "Fixed", Type = typeof(FixedBankAccount), IsDefault = true)] 
[InheritanceMapping(Code = "Savings", Type = typeof(SavingsBankAccount))] 
public abstract partial class BankAccount : INotifyPropertyChanging, INotifyPropertyChanged, DomainInterfaces.IBankAccount 
{ 
     .. 
    } 
} 

READING

  1. Optimizing Repository’s SubmitChanges Method

  2. How do you abstract out your persistence code when using LINQ to SQL?

  3. LINQ to SQL - mapping exception when using abstract base classes

+0

theNameOfYourDBContext.SaveChanges() – Boomer

+0

@Boomer我只接收存儲庫方法中的一個接口。您的建議不起作用 – Lijo

+1

如果您知道您的IBankAccount參數肯定是BankAccount類型的,您可以只投出對象...? –

回答

3
ÿ

我們的存儲庫應該接受BankAccount而不是IBankAccount,因爲Linq-to-sql不知道什麼是IBankAccount,編譯器不允許您在不將其先存到BankAccount的情況下存儲它(如果IBankAccount實例不是BankAccount)。

一旦你有BankAccount您只需撥打:

Context.BankAccounts.Add(account); 
Context.SubmitChanges(); 
+0

謝謝。但是,這不會是「編程接口」,不是嗎? 以下是來自Scott的評論http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx - 「Add LINQ to SQL數據模型類的接口LINQ to SQL類是部分類 - 這意味着您可以直接將接口添加到它們中。「這個建議在我們的場景中不起作用。有沒有辦法讓它工作? – Lijo

0

據我瞭解,你需要一個銀行系統模型。這意味着處理銀行賬戶。這是一個艱難的業務,不是「Hello World!」 - 類型的信息技術。

基本上與銀行賬戶,你需要:

  • 閱讀詳細信息(如賬戶名稱,值等
  • 借記賬戶
  • 信用賬戶
  • 終止帳戶
  • 創建一個新的帳戶
  • ...和其他操作

借方和貸方操作是所有這些操作中最「交易」的操作,因爲這意味着您將一次編輯兩個帳戶,並且想要同時編輯或同時失敗。

這又是一個風險很大的業務,因爲它涉及到檢查很多業務規則,從帳戶上有足夠的錢開始(這不是那麼簡單,因爲透支帳戶意味着您可以低於零)以確保有一項持久的交易,即從一個賬戶中扣除資金並向另一賬戶增加資金。

此外,您還必須檢查一個人不會嘗試轉移負數的金錢,因爲這將從字面上盜取其他賬戶的錢。這份名單並沒有停留在這裏。Scott Hanselman在銀行工作了一段時間,他可能對需要檢查的東西有所幫助。總而言之,我的回答似乎是「不值得」的迴應,你也可能會低估我,但同樣,這個主題太深了,不能在一個計算器回覆中被覆蓋。

對不起。

+0

感謝您的建議。我不會投票。我只是用一個例子來學習;不與實際系統一起工作。 – Lijo

+0

這很好,因爲生產系統涉及高風險。 –