0

私が取り組んでいるプロジェクトがあります。DBContext ジェネレーターで Entity Framework を使用することにしました (持続性を認識しないオブジェクトを保持するため)。現在、いくつかの問題が発生しています。

ソリューションを設定する方法は次のとおりです。

解決策:
- MyProject (私の Web アプリ プロジェクト)
- BusinessObjects (プロジェクト) には、すべてのオブジェクト (エンティティ) を含む myproject.tt ファイルが含まれています。それぞれが個別の .cs ファイルにあります。
- DataAccess (プロジェクト) には、myproject.edmx、myproject.Context.tt ファイルが含まれています

これが私の質問です:(私はこれらすべてに慣れていません)

オブジェクト (エンティティ) Job があり、このオブジェクトに対して select、insert、update、および delete メソッドを定義したいとします。どこでそれを行うのですか?BusinessObjects プロジェクト内にフォルダ Custom (すべてのカスタマイズを配置する場所) を作成しようとしました。次に、そこでメソッドを定義したかったのですが、ctx (コンテキスト) オブジェクトの新しいインスタンスを作成する方法がわかりません。

これが私のコードです:

namespace BusinessObjects
{
    public partial class Job
    {
        public Job GetJob(Guid Id) {
            using (var ctx = new BestGigEntities())

            }
            return null; //for now
        }
    }
}

表示されるエラー メッセージは、BestGigEntities が名前空間に存在しないというものです。BestGigEntities は BusinessObjects に存在するはずですが、BusinessObject プロジェクトからアクセスしようとするとなぜか表示されません。しかし、メインの Web プロジェクトから見ることができます。myproject.Context.tt では、Custom Tool Namespace として BusinessObjects を指定しています。なぜ私はそれを見ることができないのですか?

myproject.Context.cs ファイルを確認したところ、

    public partial class BestGigEntities : DbContext
    {
        public BestGigEntities()
            : base("name=BestGigEntities")
        {
 . ...

すべて問題ないようです。すべての参照を適切に追加したとほぼ確信しています。これらのメソッドを間違った場所で定義しようとしているのかもしれません。

BestGigEntities は私の Web プロジェクトから見ることができ、そこから使用できます。

どんな助けでも大歓迎です。

4

1 に答える 1

2

モデルの部分クラスを拡張することはお勧めしません。MVVMのパターンに慣れて使った方が良いです。
ここでは、サービスやヘルパーなどのいくつかのクラスについて説明します。おそらく彼らは、プロジェクトをより構造化するためにどこから始めるべきかをあなたに促すかもしれません.
最も単純な場合のCRUD操作に関しては、次のようになります

public static Job Get(int jobId)
{
    using (var context = new BestGigEntities())
    {
        return context.Jobs.FirstOrDefault(s => s.Id == jobId);
    }
}

public static void Save(Job job)
{
    using (var context = new BestGigEntities())
    {
        context.Jobs.Attach(job);
        context.Entry(job).State = EntityState.Modified;
        context.SaveChanges();
    }
}

public static void Create(Job job)
{
    using (var context = new BestGigEntities())
    {
        context.Jobs.Add(job);
        context.SaveChanges();
    }
}

public static void Delete(Job job)
{
    using (var context = new BestGigEntities())
    {
        context.Entry(job).State = EntityState.Deleted;
        context.SaveChanges();
    }
} 
于 2011-12-13T01:03:22.213 に答える