gpt4 book ai didi

c# - 通过针对接口(interface)编程来持久化数据

转载 作者:行者123 更新时间:2023-11-30 22:27:25 25 4
gpt4 key购买 nike

我有一个 IBankAccount 接口(interface),我将把它传递给 ApplicationService。对帐户对象(在 ApplicationService 项目中)所做的更改需要保存在数据库中。存储库使用 IBankAccount 接口(interface)接收更改。如何将这些数据保存到数据库中?这是使用 LINQ to SQL 实现的。

注意:以下是 Scott 在 http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx 中的评论“将接口(interface)添加到您的 LINQ to SQL 数据模型类。LINQ to SQL 类是部分类 - 这意味着您可以直接向它们添加接口(interface)。”

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
{
..
}
}

阅读

  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

最佳答案

您的存储库应该接受 BankAccount - 而不是 IBankAccount 因为 Linq-to-sql 不知道什么是 IBankAccount 而编译器也不知道允许您存储它而无需先将其转换为 BankAccount(如果 IBankAccount 实例不是 BankAccount,这显然会在运行时失败)。

一旦你有了BankAccount,你只需调用:

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

关于c# - 通过针对接口(interface)编程来持久化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com