【问题标题】:How to use a partial class to set an associations child property to false如何使用部分类将关联子属性设置为 false
【发布时间】:2012-12-03 16:53:11
【问题描述】:

我有一个变化很大的数据库,我经常不得不进入数据上下文设计器并手动将一些关联子属性设置为 false。每次我从设计器中删除表格时,我都必须返回并重做所有关联。

有没有办法使用分部类来定义关联子属性的含义,比如一个名为 Company 的实体与名为 Program 的实体具有一对多关系?

我希望我可以简单地在代码中更改关联子属性,以便每次从数据上下文中删除实体并重新添加时,我都不必再次执行整个过程。

感谢您的帮助!

【问题讨论】:

    标签: c# linq associations partial-classes


    【解决方案1】:

    我一直在看这个问题,希望有人比我有更好的消息告诉你。实际上,您可以在与上下文相同的命名空间中添加一个部分类,并在其中为子属性/集合定义新名称(当您将其定义为 User1、User2、User3 时,将其重新生成为 User1、User2、User3 非常烦人) OpenedBy、ApprovedBy 和 ClosedBy 或类似的东西)。

    正如您在上面所说的,这确实有助于通过更友好的名称访问属性;但是我还没有找到一种方法来在该部分类中定义属性,以便它维护具有完整读/写功能的实体框架导航属性的所有属性(双关语不是有意的)。

    它不能解决你的问题,但据我所知,这是一个准确的答案;我继续前进并接受了我必须在 EDMX 中重命名导航属性的情况,以防我必须删除/重新添加实体。

    【讨论】:

    • 我对此进行了一段时间的研究,最终得出的结论是我确实“只需要处理它”。最大的问题主要是记住更改了哪些关联属性,以便在删除并重新添加实体后恢复它们。
    • 我完全同意。如果模型小到可以清晰地放在单个屏幕中,我最终会保留 edmx 设计器的电子列表或屏幕截图。
    【解决方案2】:

    我也遇到了同样的问题……也找不到解决办法。

    不过,我有一些信息可供正在调查的人参考:

    ChildProperty 设置为 false 时,.designer.cs 文件将被更改(而不是 .dbml/.dbml.layout 文件)。这是一个例子......

    ChildProperty=true:

    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="bank_account_bank_payment_file", Storage="_bank_account", ThisKey="company_bank_account_id", OtherKey="bank_account_id", IsForeignKey=true)]
    public bank_account bank_account
    {
        get
        {
            return this._bank_account.Entity;
        }
        set
        {
            bank_account previousValue = this._bank_account.Entity;
            if (((previousValue != value) 
                    || (this._bank_account.HasLoadedOrAssignedValue == false)))
            {
                this.SendPropertyChanging();
                if ((previousValue != null))
                {
                    this._bank_account.Entity = null;
                    previousValue.bank_payment_files.Remove(this);
                }
                this._bank_account.Entity = value;
                if ((value != null))
                {
                    value.bank_payment_files.Add(this);
                    this._company_bank_account_id = value.bank_account_id;
                }
                else
                {
                    this._company_bank_account_id = default(int);
                }
                this.SendPropertyChanged("bank_account");
            }
        }
    }
    

    ChildProperty=false:

    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="bank_file_handler_bank_payment_file", Storage="_bank_file_handler", ThisKey="bank_file_handler_id", OtherKey="bank_file_handler_id", IsForeignKey=true)]
    [global::System.Runtime.Serialization.DataMemberAttribute(Order=17, EmitDefaultValue=false)]
    public bank_file_handler bank_file_handler
    {
        get
        {
            if ((this.serializing 
                        && (this._bank_file_handler.HasLoadedOrAssignedValue == false)))
            {
                return null;
            }
            return this._bank_file_handler.Entity;
        }
        set
        {
            if ((this._bank_file_handler.Entity != value))
            {
                this.SendPropertyChanging();
                this._bank_file_handler.Entity = value;
                this.SendPropertyChanged("bank_file_handler");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 2021-09-28
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2012-02-09
      相关资源
      最近更新 更多