2012-03-23 15 views
1

私は現在、1つの溶液中で次のようにありますPetaPocoでモデル専用プロジェクトを使用するにはどうすればよいですか?

  1. コアプロジェクト(などのデータアクセス、ビズ・ロジック、データアクセスのためのpetapoco、配管、)
  2. モデルプロジェクト(単にモデルとちょうど属性のためのpetapoco装飾)
  3. Webプロジェクト(プレゼンテーション

のためのMVCプロジェクト私は別々の私のモデルとコアを持つようにしたいが、私は両方の場所でPetaPoco.csを持つことはできません。どのように私はそれを区切ると、まだにできるようになります私のモデルでPOCOを飾るPetaPoco属性のプロジェクトですか?

私は、モデルプロジェクトがコアプロジェクトに依存しないようにしたいと思います。

私はPOCOを装飾することができますが、Core PetaPocoプロジェクトによって属性が適切に選択されていないため、モデルプロジェクトのみでこの別のクラスを作成しました。それはあまりにもPocoDataに依存しています。

提案?

私は1つの明白な解決策は、しかし、私はそれがずっとましだか分からない、独自のプロジェクトにPetaPocoを移動して、両方のあなたのコアとモデルプロジェクトであることを参照することです。考えて
// Poco's marked [Explicit] require all column properties to be marked 
[AttributeUsage(AttributeTargets.Class)] 
public class ExplicitColumnsAttribute : Attribute 
{ 
} 
// For non-explicit pocos, causes a property to be ignored 
[AttributeUsage(AttributeTargets.Property)] 
public class IgnoreAttribute : Attribute 
{ 
} 

// For explicit pocos, marks property as a column and optionally supplies column name 
[AttributeUsage(AttributeTargets.Property)] 
public class ColumnAttribute : Attribute 
{ 
    public ColumnAttribute() { } 
    public ColumnAttribute(string name) { Name = name; } 
    public string Name { get; set; } 
} 

// For explicit pocos, marks property as a result column and optionally supplies column name 
[AttributeUsage(AttributeTargets.Property)] 
public class ResultColumnAttribute : ColumnAttribute 
{ 
    public ResultColumnAttribute() { } 
    public ResultColumnAttribute(string name) : base(name) { } 
} 

// Specify the table name of a poco 
[AttributeUsage(AttributeTargets.Class)] 
public class TableNameAttribute : Attribute 
{ 
    public TableNameAttribute(string tableName) 
    { 
     Value = tableName; 
    } 
    public string Value { get; private set; } 
} 

// Specific the primary key of a poco class (and optional sequence name for Oracle) 
[AttributeUsage(AttributeTargets.Class)] 
public class PrimaryKeyAttribute : Attribute 
{ 
    public PrimaryKeyAttribute(string primaryKey) 
    { 
     Value = primaryKey; 
     autoIncrement = true; 
    } 

    public string Value { get; private set; } 
    public string sequenceName { get; set; } 
    public bool autoIncrement { get; set; } 
} 

[AttributeUsage(AttributeTargets.Property)] 
public class AutoJoinAttribute : Attribute 
{ 
    public AutoJoinAttribute() { } 
} 

答えて

0

あなたのモデルには依然として外部依存関係がありますが、Coreアセンブリ全体ではありません。

もう1つの選択肢は、Coreプロジェクトであなたの装飾したモデルを社内で使用してから、モデルアセンブリで装飾されていないクラスを設定することです。自動マッピングコンポーネントを使用すると、2つの間を簡単にマッピングできます。だから、基本的にはPetaPocoを使って内部モデルにデータをフェッチし、それを依存関係のない裸のクラスである「外部」モデルにマップします。

もちろん、余計な作業が多いようです。私は、あなたのModelアセンブリが他の依存関係を持たないことがいかに重要であるかということにすべてのヒンジがあると思います。

+0

PetaPocoはただ1つのクラスファイルなので、おそらく自分自身のプロジェクトに持っているのは残酷かもしれません。私のモデルプロジェクトを別にしておくことは価値があるかどうか考える必要があります。ありがとう。 – Shane

+0

ええ、私は同意します(私はPetaPocoを使用します)。ちょうどオプションを与える。 。 。 – patmortech

+0

私は先に進んで、私のモデルプロジェクトを殺してコアに戻しました。別のモデルプロジェクトはありません。実用主義が勝つ。私はあなたが私が単純化すべきであることを確認したと思うので、あなたの答えを受け入れる。 :) – Shane

関連する問題