我有一个聚合类,它将包含另一个类的集合,但该类只存在于该聚合的集合中,所以我不需要在我的代码中使用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
类的密钥声明为SalesListingId
和CultureCode
的组合而不创建SalesListingId
属性或引用回{{ 1}}。用EF 5.0做任何方法吗?
例如,这里有一个例子,我怎么想象这样的API会是这样的:
SalesListing
答案 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 );