1

我有一个聚合类,它将包含另一个类的集合,但该类只会存在于该聚合的集合中,因此我的代码中不需要它的 ID,也不需要引用总计的。例如:

public class SalesListing 
{
    public Guid Id { get; set; }
    public ICollection<LocalizedDescription> Descriptions { get; set; }
}

public class LocalizedDescription
{
    public string CultureCode { get; set; }
    public string Title { get; set; }
}

我只想将LocalizedDescription类的键声明为组合SalesListingIdCultureCode不创建SalesListingId属性或引用回SalesListing. 有什么办法可以用 EF 5.0 做到这一点?

例如,这是一个示例,如果存在这样的 API,我会如何想象它:

modelBuilder.Entity<LocalizedDescription>().BelongsTo<SalesListing>(s => s.Description)
            .WithKey((s, ld) => new { s.Id, ld.CultureCode })
4

2 回答 2

1

不,您仍然需要指定一个 ID

于 2013-02-05T05:53:56.870 回答
0

您可以使用以下语法定义复合键:

modelBuilder.Entity<LocDesc>().HasKey(ld => new { ld.CultureCode, ld.Title });

也就是说,我认为您会后悔没有定义整数主键。如果您需要导出内容(例如用于外部审阅或翻译),按 ID 匹配记录将比按标题匹配更快且更不容易出错。拥有 ID 并没有什么坏处,而且现在比以后改装更容易。

我认为您可以通过不在映射定义中为关系提供特定属性来隐式指定 FK 映射:

modelBuilder.Entity<SalesListing>().HasMany( e => e.Descriptions ).WithRequired();

如果您需要指定外键属性,SalesListingID请为该值引入一个属性并改用以下映射:

modelBuilder.Entity<SalesListing>().HasMany( e => e.Descriptions ).WithRequired()
    .HasForeignKey( r => r.SalesListingID );
于 2013-02-03T00:01:52.933 回答