2009-05-06 4 views
1

Учитывая эту схему:Как обновить строку SQL с идентификатором LINQ to SQL?

Fruits 
- FruitID  INT PK 
- FruitName  NVARCHAR(30) 
- FruitStatusID INT NULL FK: Statuses 

Statuses 
- StatusID  INT PK 
- StatusName NVARCHAR(30) 

Если у меня в руке FruitID (просто INT, а не объект Fruit), как я могу обновить FruitName и обнулять FruitStatusID без загрузки объекта Fruit из базы данных первого ?

Примечание: this solution получает меня довольно далеко, но я не могу понять, как обнулить столбец FK.

Ответы на C# или VB, спасибо!

+1

Это выглядит как случай преждевременной оптимизации. Пойдите с прямым SQL, если вы обеспокоены производительностью. При необходимости вы можете смешать выполнение команды ado.net и LINQ to SQL в одной транзакции. – JohnOpincar

+0

Это упрощенный пример. Кроме того, если я могу легко избежать получения записи из базы данных только для ее обновления, я буду - я не думаю, что это преждевременно. –

ответ

0

Это работает, но кажется излишне сложным:

''//initialize the values I'm going to null out to something 
Dim Tag As Data_Tag = New Data_Tag() With { 
    .Data_Tag_ID = DataTagID, 
    .Last_Error_DateTime = New DateTime(), 
    .Last_Error_Message = "", 
    .Last_Error_Severity_Type_ID = -1 } 

''//start change tracking 
DB.Data_Tags.Attach(Tag) 

''//record changes to these properties (must be initialized above) 
Tag.Last_Error_DateTime = Nothing 
Tag.Last_Error_Message = Nothing 
Tag.Last_Error_Severity_Type_ID = Nothing 

DB.SubmitChanges() 

Конечно, есть лучший путь!

(примечание: странный синтаксис комментариев исключительно для кода highliger - это не нравится комментарии VB-стиль)

Смежные вопросы