2012-07-02 33 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

这很好,因为生产系统涉及高风险。 –