8

.edmxモデルを使用するデータベースファーストアプローチでEF 4.0を使用してきました。データベースからのエンティティクラスの作成方法に影響を与える

EF 6.1.3にアップグレードしており、.edmxモデルを使用するかどうかは検討しています。私たちはまだデータベーススキーマを管理したいと思っています。そのため、SQLスクリプトを使用して新しいテーブルなどを作成し、既存のデータベースからEFモデル(.edmxまたはコードクラスのみ)を生成します。

Visual Studio 2013の試用期間中、EF 6が既存のデータベースからクラスを作成するときに迷惑な点に気付きました。 DesignContactの場合は1回、SalesContactの場合は1回、SupportContactの場合は3回、ContactクラスにリンクするCustomerクラスがあります。それらはテーブルにDesignContactId (INT)などの列として格納されます。データベースからクラスを作成する場合

CREATE TABLE dbo.Contact 
(
    ContactID INT NOT NULL 
     CONSTRAINT PK_Contact PRIMARY KEY CLUSTERED, 
    Name VARCHAR(200), 
    Address VARCHAR(200), 
    ZipCode VARCHAR(20), 
    City VARCHAR(100), 
    Phone VARCHAR(100) 
) 

CREATE TABLE dbo.Customer 
(
    CustomerID INT NOT NULL 
     CONSTRAINT PK_Customer PRIMARY KEY CLUSTERED, 
    Name VARCHAR(200), 
    -- other properties 
    DesignContactID INT 
     CONSTRAINT FK_Customer_DesignContact 
      FOREIGN KEY REFERENCES dbo.Contact(ContactID), 
    SalesContactID INT 
     CONSTRAINT FK_Customer_SalesContact 
      FOREIGN KEY REFERENCES dbo.Contact(ContactID), 
    SupportContactID INT 
     CONSTRAINT FK_Customer_SupportContact 
      FOREIGN KEY REFERENCES dbo.Contact(ContactID), 
) 

が、私はこれを参照してください:

あなたは、このT-SQLを使用してこれらのクラスを作成することができます

  • Customerクラスは、フィールドとしての私の3つのxxxContactIdの列があります - それは期待どおりです
  • EFはContactの3種類のナビゲーションプロパティも生成しますが、Contact,Contact1,Contact2-uuuuuggghHHHH! - これは1ポイントになりました連絡先に

    • その直感的ではありません:私はので、これらは悪いです.....それらの恐ろしく悪いという名前のナビゲーションプロパティを回避する方法を見つけるためにしようとしている

  • は「安定」ですか、またはContactの4番目の関係が導入されていると時間の経過とともに変化する可能性がありますか?よくわからない.....(これに関するドキュメントは見つかりません)
  • 名前は絶対に恐ろしいです...なぜDesignContactDesignContactIdに基づいて)、SalesContactSalesContactIdに基づいて) )など?

EF 4.1では、最大、あなたは.edmxにT4テンプレートを追加し、生成プロセスに影響を与えることができました - あなたは「既存のデータベースからのコード-最初の生成」やっている場合は、そのまだ可能何とかEF6でありますアプローチ?そのブログの投稿や記事はもう見つけられません.....

また、EFがどのようにクラスを生成するかに影響する別の方法がありますか?これに影響を与えるカスタムコンベンションや何かを定義できますか?

+1

@JulieLerman:この上の任意の考え(EF_の_Queenなど:-)?) –

+0

@RowanMiller:これを処理するためのあなたの袖の上の任意のアイデアやトリックですか? –

+0

適用:http://stackoverflow.com/a/13064383/1207195? –

答えて

0

におけるチッピングのためのみんなに感謝 - 私は様々なアプローチを試してみました:

  • 私はCodePlexに上の「EFリバースポコ」プロジェクトを試みたが、すべての

  • でそれとはかなり満足していませんでした
  • EF 6用のEFパワーツールを試しましたが、うまくいきました。これにより、T4テンプレートを追加してコード生成プロセスに影響を与えることができました。作品 - しかし、挑戦は、コード生成のための基礎として使用されているオブジェクトモデルを理解することです(....)しかし、パワーツールと同じ問題を持っている - 実際に必要となるオブジェクトモデルを掘り下げるの、多くのことを何も変更する

0

生成されたクラスの設定を.edmxファイルで(メモ帳などで)変更できます。あなたがそれを変更する前にそれをバックアップしてください。それは理想的ではありませんが、動作し、dbからの更新は変更を上書きしません。

<EntityType Name="SomeEntityName" a:TypeAccess="Internal" xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration"> 
    <Key> 
     <PropertyRef Name="Id" /> 
    </Key> 
    <Property Name="Id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" /> 
    <Property Name="Contact" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" /> 
    <Property Name="DesignContact" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" /> 
</EntityType> 
+0

** ** '.edmx'ファイルはありません**これはデータベースから**コードファースト**(またはコードのみ)に生成されます。 C#のクラス - もはや '.edmx'ファイル..... –

+0

@marc_s私の読書が悪い。私は最初にコードに行きましたが、エンティティのマッピングを書くことはあまりにも悪くありません。正しく読んでいれば、あなたの問題を軽減できます。それ以外の場合、私はedmxを生成し、必要に応じて編集しました。 –

関連する問題