3

Linq to SQLでは、データベースに存在する外部キーとPKSに依存する必要がないリレーションシップを指定することができました。EF4.1(コードファースト) - 複合関係を指定する方法

public class Equipment_CableNormalised 
{ 
    ... 

    [Association(ThisKey = "EquipmentId,PortNumber", OtherKey = "EquipmentId,PortNumber", IsForeignKey = false)] 
    public List<EquipmentPort> EquipmentPorts 
    { 
     get; set; 
    } 

} 

これで、" .. join EquipmentPorts EP on EP.EquipmentId = blah and EP.PortNumber = Blah"に似たsqlが生成されました。

EF4.1でアノテーションや流暢なAPIを使用して同じことを実行できますか?複合キーを指定して[キー]と[外部キー]属性を使用することができますが、この関係はキーに対応していません...

+0

「関係がキーにマップされていません」とはどういう意味ですか?キー(PK/UK、FK)にマップされていない場合は、データベース関係ではありません。 –

+0

データベース関係ではありません。実際には、これらのエンティティの1つは実際には表ではなくビューにマップされます。これらのエンティティとその関連付けを結びつけて、より複雑なクエリコードを書く必要がなくなったのは、L2Sの便利な解決策でした。したがって、データベース内の内容を「純粋な」表現ではありません。 –

答えて

0

コードからのサンプルの関係はどのように機能しますか? EquipementIdは、片方のPKやユニークキー(L2SとEFの両方でサポートされていない)でなければならないと思います。そうしないと、関係が存在しない可能性があります(1対1と1対多の両方に固有のプリンシパルが必要です)。片側がPKの場合、ポート番号は冗長です。

コードは最初にキーへのマッピングのみを許可します。既存のデータベースをお持ちの場合は、モデル内でそのデータベースを不正使用し、既存のマップと同じ方法で新しいリレーションをマップできますが、依然として単純なルールに従わなければなりません - プリンシパルのプロパティはプライマリキーであり、 。

EFがDBを生成したい場合は、データベース内に常にすべての関係があります。

+0

応答に感謝します。この場合、EFからDBを生成することは決してありません。かなり複雑で、そこにprocsといくつかのEF非サポートデータ型が格納されています。 L2Sでは、実際にはデータベースに存在する関係にマップされていない私の例に従った関係(アソシエーション)を作成できます。その例の片側にはビュー(キーがないため)があり、反対側には独自の "id" PKを持つテーブルがあります。実際に定義された関係を持たないSQLの2つのテーブルを「結合」するのと同じように、私はL2Sとしてそれを私にちょうどアドホックな関係を定義させることができます。 –

0

使用HasKey http://www.ienablemuch.com/2011/06/mapping-class-to-database-view-with.html

どちらかHasKeyを使用し、外部キーに関するご質問についてはキー列の順序

public class SalesOnEachCountry 
{        
    [Key, Column(Order=0)] public int CountryId { get; set; } 
    public string CountryName { get; set; } 
    [Key, Column(Order=1)] public int OrYear { get; set; } 
      
    public long SalesCount { get; set; }      
    public decimal TotalSales { get; set; } 
} 

 modelBuilder.Entity<SalesOnEachCountry>().HasKey(x => new { x.CountryId, x.OrYear });    

OnModelCreating

でこれを置くか、または使用し、私はまだ持っていません純粋なコード(OnModelCreating)のアプローチを試してみましたが、おそらく2つのForeignKey属性を子クラス自体に置くことができます。

これは、答えは次の2つのForeignKeyは、子クラス自体に属性を置くことができると私の直感を確認してその答えcomposite key as foreign key

である可能性があります。

+0

ありがとう、まだこれで喜んでいない、私は簡単なテストを試し、私がどのように取得するかを見てみましょう。 –

関連する問題