Пользовательское выражение в Linq-to-Sql Designer - PullRequest
3 голосов
/ 03 мая 2010

По данным Microsoft:

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

Можно добавить выражение в сопоставление Linq-to-SQL.

Но как настроить или добавить их вVisual Studio в дизайнере?Проблема, когда я добавляю это руководство к thex 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 голосов
/ 03 мая 2010

Это немного глупо, но в вашем конструкторе linq2sql переименуйте поле с 'id' в 'xid' (или что-нибудь еще) и измените его доступность на внутреннюю.

затем, в другом файле, запустите другой частичный класс, как показал Вим Хаанстра, и создайте новое свойство с именем 'id', добавьте все нужные вам атрибуты, а в get & set просто сопоставьте его с исходное свойство, теперь называется 'xid'.

это будет выглядеть примерно так:

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

это чаще всего делается для сопоставления полей в базе данных с другим типом объекта, например, int в DB для перечисления в объекте, байта / smallint / и т.д. в БД, логическое значение в объекте. или добавить атрибуты, такие как [DataMember] к свойству.

0 голосов
/ 04 мая 2010

Согласно этой статье:

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

Вы должны использовать свойство ColumnAttribute.Expression , когда используете CreateDatabase , чтобы определить столбец как содержащий вычисленные значения. Поэтому вы должны проверить эту статью:

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

Другой способ - определить выражение на вашем сервере sql, чтобы оно отображалось дизайнером LINQ.

0 голосов
/ 03 мая 2010

Изменить: мммм, вы отредактировали свой вопрос, так что, вероятно, мой ответ не очень вам поможет, но вы могли бы сделать это в любом случае с вашим «расширенным» вопросом: D

Я делаю это, добавляя в проект другой файл класса, присваиваю им то же имя, что и у объекта из LinQ-to-SQL, который вы хотите расширить, и определяю его как частичное.

Например,

, если у вас есть таблица с именем Файлы , объект Файл будет создан для вас L2S. Если вы затем создадите файл (с тем же пространством имен, что и у вашего объекта DataContext), и сделаете его частичным, например:

public partial class File
{
}

Вы можете просто добавлять свойства, методы и т. Д. Из этого класса у вас также есть прямой доступ к свойствам «другого» * ​​1014 * файла класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...