1

私のデータベースでは、一対多の関係があります (バンドには多くのアルバムがあります)。ただし、Album の外部キーが制限されている場合、この関係は 1 対 1 になります。

public class Band
{
    [Key]
    public int BandID { get; set; }

    //Other fun attributes

    public virtual ICollection<Album> Albums { get; set; }
}

public class Album
{
    [Key]
    public int AlbumID { get; set; }

    public int BandID { get; set; }

    //Other fun attributes

    //Some other foreign key
    public int SomeOtherKey { get; set; }
}

生成すべきSQL

SELECT * FROM Band
LEFT JOIN Album ON (Band.BandID = Album.AlbumID AND Album.SomeOtherKey = 12)

私の質問はpublic virtual Album Album、Band に別のナビゲーション プロパティを用意する必要があるか、またはこれが常に正しいとは限らないため、それは悪い考えでしょうか? LINQ を使用する必要がありますか? Entity Framework とモデルを使用してこれを達成する最も簡単な方法は何ですか?

4

2 に答える 2

1

答えは、ナビゲーション プロパティを使用するのではなく、新しいモデルで Linq クエリを使用して結果を保持することです ...

var query =
    from band in Context.Band
    join album in Context.Albums on album.BandID equals band.BandID into j1
    from j2 in j1.Where(x => x.SomeOtherKey == value).DefaultIfEmpty()
    select new BandWithAlbumModel
    {
        Band = band,
        Album = j2
    };


public class BandWithAlbumModel
{
     public Band Band { get; set; }

     public Album Album { get; set; }
}
于 2012-07-20T19:59:35.487 に答える
0

追加すると

public virtual Album Album;

それは

public virtual ICollection<Album> Albums { get; set; }

前者は 1:1 の関係を意味し、後者は 1:N の関係を意味します。

おそらく、Band には複数の (またはまったくない) Albums がある可能性があるため (ここではドメインの知識:-)、ICollection が最も必要とされるものです。

必要に応じて、追加することもできます

public virtual Band Band { get; set;}

Album

私はあなたが何を意味するのか理解していません

ただし、Album の外部キーが制限されている場合、この関係は 1 対 1 になります。

その発言を明確にしていただけますか?

于 2012-07-05T17:22:14.037 に答える