【问题标题】:Can I retrieve a property value from a parent model, without a DB relationship between child and parent?我可以从父模型中检索属性值,而子模型和父模型之间没有数据库关系吗?
【发布时间】:2016-02-12 23:12:09
【问题描述】:

我有一个为多个网站提供服务的应用程序,并希望像这样设置颜色方案:

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

网站配置.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 访问默认颜色。

  • 我能想到的唯一其他选择是直接从ColourSchemeItemclass 中访问数据库。如果要超过 50 个,我不想这样做。

【问题讨论】:

  • WebsiteConfiguration 和 ApplicationConfiguration 是 EF DB 类吗?为什么不将 ApplicationConfiguration 类创建为抽象类并让 WebsiteConfiguration 类继承自它?这样就可以避免很多if then。
  • 是的。我会更新问题以使其更清楚。继承会节省我的代码吗?我想我仍然需要为每个项目声明 3 个属性(如上面的第一个代码示例)。这就是我要避免的

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多