Linq-to-Sql Designer中的自定义表达式

时间:2010-05-03 11:45:47

标签: c# visual-studio visual-studio-2008 linq-to-sql

根据微软的说法:

http://msdn.microsoft.com/de-de/library/system.data.linq.mapping.columnattribute.expression.aspx

可以在Linq-to-SQL映射中添加表达式。

但是如何在Designer中的Visual Studio中配置或添加它们? 问题是,当我将它手动添加到x XYZ.designer.cs时,它将会丢失。

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.4927
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

生成:

   [Column(Name="id", Storage="_id", DbType="Int")]
   public System.Nullable<int> id
   {
    ...

但我需要这样的东西

[Column(Name="id", Storage="_id", DbType="Int", Expression="Max(id)")]
public System.Nullable<int> id
{
  ...

感谢。

3 个答案:

答案 0 :(得分:0)

编辑:mmmm你编辑了你的问题,所以我的回答可能不会对你有太多的帮助,但你可能会用你的'扩展'问题做到这一点:D

我这样做是通过向项目中添加另一个类文件,给它们提供与要扩展的LinQ-to-SQL对象相同的名称,并将其定义为部分。

例如,如果您有一个名为文件的表格,则L2S将为您创建对象文件。然后,如果您创建一个文件(与DataContext对象具有相同的命名空间),并将其设置为部分,如下所示:

public partial class File
{
}

您可以添加属性,方法等。在此课程中,您还可以直接访问“其他”文件类的属性。

答案 1 :(得分:0)

这有点麻烦,但在你的linq2sql设计器中,将字段从'id'重命名为'xid'(或其他任何东西)并将其可访问性更改为内部。

然后,在另一个文件中,启动另一个部分类,如Wim Haanstra所示,并创建一个名为“id”的新属性,添加所需的所有属性,并在get&amp; set,只是将它映射到原始属性,现在称为'xid'。

它看起来像这样:

public partial class File
{
  public int? id
  {
     get { return xid; }
     set { xid = value; }
  }
}

这通常用于将数据库中的字段映射到对象中的不同类型,例如, DB中的int到对象中的枚举,byte / smallint / etc.在DB中,对象中的布尔值。或者将[DataMember]等属性添加到属性中。

答案 2 :(得分:0)

根据这篇文章:

http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.columnattribute.expression.aspx

使用CreateDatabase 时,应使用ColumnAttribute.Expression属性将列定义为包含计算值。 所以你应该查看这篇文章:

http://msdn.microsoft.com/en-us/library/Bb399420%28v=VS.100%29.aspx

另一种方法是在sql server上定义表达式,以便它由LINQ设计器映射。