Linq to sql行为,上下文对象,DB关系

时间:2013-01-21 07:15:51

标签: c# linq-to-sql

我正在使用linq to SQL,我有两个问题。

这是我的DBML文件enter image description here

的快照

第一个: - 在WorkflowInstance表中,当我调用WFTypeID属性或任何关系时,它给我int?字段不是对象,不像在ApplicationForm表中那样工作正常。 我检查一下designer.cs文件,它继续定义它们System.Data.Linq.Mapping.ColumnAttribute而不是System.Data.Linq.Mapping.AssociationAttribute任何想法为什么会发生这种情况发生在某些表中而有些不是?!

第二期: - 一些表有1:N关系和一些1:1的关系。 显示关系为EntityRef或EntitySet的所有表。 为什么它没有给我一个单一的对象。或者这是正常的行为?!

2 个答案:

答案 0 :(得分:2)

1:LINQ-to-SQL公开了一个双重API:外键通常以原始形式 作为对象形式。所以我完全希望WFTypeID成为int?或类似的。有趣的问题是:还有一个WFType属性吗?如果没有,您可能需要检查关联属性。单击虚线,查看Child / Parent属性,然后检查基数。

2:{0 | 1} - *关系中的支持字段EntityRef<T>是正常的,但是 - public API已生成通过LINQ-to-SQL应该只是T;例如:

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

其中会员名来自协会的“父母财产”&gt; “名称”:

enter image description here

请注意,_UserEntityRef<User>,但公共属性User的类型为User

答案 1 :(得分:0)

第一个问题:WFTypeID字段表示外键,我猜你的主键是整数;返回整数是正常的。

第二个问题:如果关系是1比1;您将获得一个EntityRef对象,表示该关系另一端的对象。如果关系是1:N,则另一方面将获得表示对象的EntitySet。这是正常行为,在一对多关系中,一个实体将映射到“多个”实体,而不是单个对象。