0

以下の表から次のドメインクラスモデルを生成する必要があります。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;
    }
}

読む

  1. リポジトリパターンを実装するためにLINQからSQLプロバイダーに分離されたエンティティクラス。どのように?

  2. POCOLINQを使用してSQLエンティティ http://stephenwalther.com/archive/2008/07/22/asp-net-tip-23-use-poco-linq-to-sql-entities.aspx

  3. LINQ toSQLXMLマッピングファイルの使用 http://weblogs.asp.net/dwahlin/archive/2008/08/18/using-linq-to-sql-xml-mapping-files-step-by-step.aspx

  4. 方法:POCOで定義されたエンティティを使用するドメインサービスを作成する http://msdn.microsoft.com/en-us/library/gg602754(v=vs.91).aspx


4

1 に答える 1

1

Linq-to-Sqlがインターフェイスへのマッピングをサポートしているかどうかはわかりません(Entity Frameworkはサポートしていませんが、NHibernateはサポートしています)。IBankAccountを抽象クラスに置き換えるとBankAccount、言及されているすべてのテクノロジでTPH継承を簡単にマッピングできるはずです。これがLinq-to-Sqlの例です

継承をマップしたら、基本クラスまたは特定のクラスのいずれかをクエリできます(OfTypeLinq-to-SqlまたはEntity Frameworkで使用することにより)。基本クラスをクエリする場合、ORMは内部的にすべての継承されたクラスも通過します。

于 2012-07-02T08:10:16.250 に答える