5

Productsという1つのテーブルを持つデータベースがあるとします。そこで、私はDbファーストアプローチを行い、pluralize and singularizeオプションでVS 2012でEFモデルを作成します。EFの場合のカスタム命名規則の定義方法5

したがって、このモデルではProductエンティティが作成され、デフォルトの命名規則ではこのエンティティがdbo.Productsテーブルにマップされます。

この動作を変更したいと思います。実際にはProductModelエンティティをdbo.Productsテーブルにマップするためのカスタム規約を作成したいと思います。

これは可能ですか?もしそうなら、どうですか?

更新:それを行うには私の目標...

それはあなたのモデルの変化を引き起こす場合は、データベースからモデルを更新するたび

ご存知のように、自動生成されたエンティティが上書きされます。

一方から、私は自分の意見を形成し、単純に次のインサートのように私のDbContextで仕事をしたいためにそれらを使用できるように、データアノテーションは、エンティティのプロパティに属性を追加したい:

public ActionResult Create(Product product) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Products.Add(product); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(product); 
    } 

問題は、私のアプリケーション分析が完了せず、データベースが時代に変わることです。したがって、データベースからモデルを更新する必要があります。その後、すべての属性が削除されます。

私はProductModelクラスを作成し、それにProductコードをコピーしてビューモデルとしてビューに渡すことにしました。私は私のデシベルを照会したいwheneその後、私は事前

デフォルトで
+0

ません...!私はすることができますが、私は.edmxとそれのエンティティを微調整したくありません – AminSaghi

+1

それでは、今、私は(a)あなたがしたいこと、そして(b)本当にあなたの質問が.... 。私が知っている唯一の慣例*は、EF ** 6 **がコードファースト開発にもたらすカスタム規約です。他に何も存在しない、私は恐れている –

+0

親愛なる友人!私は自分のQを更新し、いくつかの説明を追加しました... – AminSaghi

答えて

3

、データベースの最初のアプローチでdbo.ProductModels名がDBに存在していないと言う例外...

感謝を取得します同じ名前のエンティティに常にテーブル名をマッピングします(複数化/単数化されている可能性があります)。現在、EFには、条約やツールによってそれを調整する規定はありません。モデルを変更/適応/カスタマイズすることはできますが、再生成するとその変更は失われます。私は、これらの変更を何らかの形で「保持」し、データベースからモデルを再生成した後にそれらを再適用するためのツール/スクリプト/ハックを認識していません。

あなたが生成さを延長する必要がある場合、私はそれらが部分クラスであることを利用してお勧めしたい - あなたは第二の物理ファイルにに生成されたクラスを拡張することができます。

別のファイルにこれを書きます、例えばProductExtension.cs:そのクラスを構成する

public partial class Product 
{ 
    // add your custom methods etc. here 
} 

これらのさまざまなファイルはあなたのためのC#コンパイラによって一つのクラスにマージされます。

既存の生成されたクラスへのデータの注釈を追加する必要がある場合は、あなたがたmetadataType(..)を使用することができますがas shown in this SO question and its answers属性:

は、例えば、別のファイルにこれを書きますこのような

[MetadataType(typeof(ProductMetaData))] 
public partial class Product 
{ 
} 

、その後、さらに別のファイルで貴社の製品クラスのメタデータ/データ注釈を定義し、ProductMetadata.cs、::ProductExtension.cs

public class ProductMetaData 
{ 
    [Required] 
    public int RequestId {get;set;} 
    //... 
}