首先使用ef代码将属性导航到共享密钥

时间:2012-11-17 06:37:09

标签: entity-framework-4.1 ef-code-first

鉴于此代码第一个数据模型,我将如何在LocalizedName实体上配置或实现Product导航属性,该属性使用LocalNameKey实例上的Product属性其中一个键,以及上下文中的_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; }
}

1 个答案:

答案 0 :(得分:0)

不,你不能。如果你尝试,EF将尝试创建一个与上下文相对应的表,并可能阻止尝试。

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

顺便说一句,将FK用于实体的每个单独属性的本地化条目可能在性能方面非常苛刻。请参阅this Q&A以获取一些好的提示(不仅仅是接受的答案)。