首先是EF代码中一对多关系的隐式键

时间:2013-02-02 23:47:53

标签: c# entity-framework ef-code-first entity-framework-5

我有一个聚合类,它将包含另一个类的集合,但该类只存在于该聚合的集合中,所以我不需要在我的代码中使用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属性或引用回{{ 1}}。用EF 5.0做任何方法吗?

例如,这里有一个例子,我怎么想象这样的API会是这样的:

SalesListing

2 个答案:

答案 0 :(得分:1)

不,您仍需要指定ID

答案 1 :(得分: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 );