以下の表から次のドメインクラスモデルを生成する必要があります。Linq2SQLを使用してそれを実現することは可能ですか。それが不可能な場合、Entity Frameworkは役に立ちますか?その方法を教えてください。
注:ドメインクラスのコードは、リポジトリのFindAll()メソッドを実装する方法で利用できますか?。マッピングの例もここで利用できます。
注:Linq2SQLで生成されたエンティティとドメインクラスの間のマッピングを回避しようとしています。
編集:「オブジェクトリレーショナルマッピングテクノロジとしてのLinq to SQLは、クラス階層ごとのテーブル戦略のみをサポートします。これは、継承階層のすべてのレベルが同じテーブルに格納され、ディスクリミネータ列がレコードが表すクラスを示すことを意味します。 「」
CREATE TABLE [dbo].[BankAccount](
[BankAccountID] [int] NOT NULL,
[AccountType] [nchar](10) NOT NULL,
[OpenedDate] [datetime] NULL,
[Status] [nchar](10) NULL,
[AccountOwnerID] [int] NULL,
CONSTRAINT [PK_BankAccount] PRIMARY KEY CLUSTERED
(
[BankAccountID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
工場は以下の通りです
public class MySimpleBankAccountFactory : IBankAccountFactory
{
public DomainEntitiesForBank.IBankAccount CreateAccount(string accountType, int bankAccountID, string status, System.Nullable<System.DateTime> openedDate, System.Nullable<int> accountOwnerID)
{
DomainEntitiesForBank.IBankAccount acc = null;
if (System.String.Equals(accountType, "Fixed"))
{
acc = new DomainEntitiesForBank.FixedBankAccount();
acc.BankAccountID = bankAccountID;
acc.AccountStatus = status;
}
if (System.String.Equals(accountType, "Savings"))
{
acc = new DomainEntitiesForBank.SavingsBankAccount();
acc.BankAccountID = bankAccountID;
acc.AccountStatus = status;
}
return acc;
}
}
読む
POCOLINQを使用してSQLエンティティ http://stephenwalther.com/archive/2008/07/22/asp-net-tip-23-use-poco-linq-to-sql-entities.aspx
LINQ toSQLXMLマッピングファイルの使用 http://weblogs.asp.net/dwahlin/archive/2008/08/18/using-linq-to-sql-xml-mapping-files-step-by-step.aspx
方法:POCOで定義されたエンティティを使用するドメインサービスを作成する http://msdn.microsoft.com/en-us/library/gg602754(v=vs.91).aspx