我可以从父模型中检索属性值,而在子模型和父项之间没有数据库关系吗?

时间:2015-11-11 18:48:25

标签: c# asp.net-mvc parent-child

我有一个服务多个网站的应用程序,并希望设置这样的颜色策划:

  • 每个元素(链接,文本,标题等)都有应用程序的默认值
  • 可以为各个网站覆盖每个元素
  • 如果元素设置为应用程序默认值,则应记住自定义颜色以供将来参考

网站Configuration.cs

public class WebsiteConfiguration
{
    public ApplicationConfiguration ApplicationConfiguration { get; set; }

    public string CustomLinkColour { get; set; }
    public bool IsCustomLinkColourActive { get; set; }
    public string LinkColour 
    {
        get
        {
            return (IsCustomLinkColourActive ? CustomLinkColour : ApplicationConfiguration.DefaultLinkColour);
        }
    }

    public string CustomTextColour { get; set; }
    public bool IsCustomTextColourActive { get; set; }
    public string TextColour 
    {
        get
        {
            return (IsCustomTextColourActive ? CustomTextColour : ApplicationConfiguration.DefaultTextColour);
        }
    }

    // ...and so on for each colour scheme element...
}

ApplicationConfiguration.cs

public class ApplicationConfiguration
{
    public List<WebsiteConfiguration> WebsiteConfigurations { get; set; }
    public string DefaultLinkColour { get; set; }
    public string DefaultTextColour { get; set; }
    //... and so on for each colour scheme element...
}

问题

这需要做很多工作!

上面的例子中只有2个配色方案元素,但可能有50多个。

此外,它在视图文件中创建了大量工作,包含if else块等。

尝试解决方案

ColourSchemeItem类管理逻辑。

public class ColourSchemeItem
{
    public string DefaultColour { get; set; }
    public string CustomColour { get; set; }
    public bool IsCustomColourActive { get; set; }
    public string ActiveColour
    {
        get
        {
            return (IsCustomColourActive ? CustomColour : DefaultColour);
        }
    }
}

然后WebsiteConfiguration变得更加简单......

public class WebsiteConfiguration
{
    public ApplicationConfiguration ApplicationConfiguration { get; set; }

    public ColourSchemeItem Link { get; set; }
    public ColourSchemeItem Text { get; set; }

    // ...and so on for each colour scheme element...
}

然而...

但不知怎的,我需要从ApplicationConfiguration获取默认颜色到ColourSchemeItem。我无法弄清楚如何。

  • 如果ColourSchemeItem包含对其父级的引用 - WebsiteConfiguration - 我收到No Key Defined for Entity错误。

  • 如果ColourSchemeItem不包含对其父级的引用,则无法从WebsiteConfiguration.ApplicationConfiguration访问默认颜色。

  • 我能想到的唯一其他选项是直接从ColourSchemeItem类中访问数据库。如果有50多个,我不想这样做。

1 个答案:

答案 0 :(得分:0)

创建自定义构造函数,并将默认值设置为AplicationConfiguration