3

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

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

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

谢谢你的帮助!

4

2 回答 2

0

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

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

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

于 2012-12-05T23:34:15.707 回答
0

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

但是,我有一些信息供正在研究此问题的人使用:

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");
        }
    }
}
于 2013-10-14T11:11:18.217 回答