1

在我的数据库中,我有一个一对多的关系(乐队有很多专辑)。但是,当 Album 中的外键受到限制时,这种关系就变成了一对一的关系。

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 吗?使用实体框架和模型完成此任务的最简单方法是什么?

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 的关系。

因为大概一个乐队可以有多个(或没有)专辑(这里的领域知识:-),ICollection 是您最可能想要的。

根据您的需要,您可能需要添加

public virtual Band Band { get; set;}

Album.

我不明白你的意思

但是,当 Album 中的外键受到限制时,这种关系就变成了一对一的关系。

你能澄清那句话吗?

于 2012-07-05T17:22:14.037 回答