0

鉴于此代码优先数据模型,我将如何在实体上配置或实现LocalizedName导航属性,将实例上的属性用于其中一个键,并将上下文中的属性用作另一个键?ProductLocalNameKeyProduct_languageId

public class SampleDataContext : DbContext
{
    int _languageId;

    public SampleDataContext(int languageId)
    {
        _languageId = languageId;
    }

    public DbSet<LocalizedName> LocalNames { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<Language> Languages { get; set; }
}

public class LocalizedName
{
    [Key, Column(Order = 0)]
    public Guid Key { get; set; }

    [Key, Column(Order = 1)]
    public int LanguageId { get; set; }

    public string Name { get; set; }
}

public class Language
{      
    public int Id { get; set; }
    public string Name{ get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string Sku { get; set; }
    public Guid LocalNameKey { get; set; }
}
4

1 回答 1

0

不,你不能。如果您尝试,EF 将尝试创建一个与上下文相对应的表,并且可能会窒息尝试。

您必须使用存储库模式来确保对任何本地化实体的查询也包含语言 id(它将被封装在存储库中,而不是上下文中)。

顺便说一句,对实体的每个单独属性进行本地化条目的 FK 对性能的要求可能非常高。有关一些好的提示(不仅是公认的答案),请参阅此问答。

于 2012-11-17T11:24:53.720 回答