繁体   English   中英

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

[英]Custom Expression in Linq-to-Sql Designer

根据微软的说法:

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
{
  ...

谢谢。

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

我通过向项目添加另一个类文件来实现这一点,为它们提供与要扩展的LinQ-to-SQL的对象相同的名称,并将其定义为partial。

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

public partial class File
{
}

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

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

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

它看起来像这样:

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

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

根据这篇文章:

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设计器映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM