使用LINQ从几个类向MS SQL数据库添加数据?

时间:2009-06-08 01:39:53

标签: c# linq sql-server-2005

好的,所以我甚至不确定从哪里开始。 SQL编程对我来说相当新鲜。

在继续讨论我的问题之前,我希望能够在LINQ中完成此操作,而不是使用存储过程。

问题:我有多个嵌套类,我需要能够将类添加到sql数据库中的多个表中。如果数据已存在,我还需要添加数据。

--------------------------------------------------------------------------
- Products      - Build        - File      - FileDetail   - BuildFiles   -
--------------------------------------------------------------------------
- ProductID     - BuildID      - FileID    - FileDetailID - BuildFilesID -
- Product_Name  - Build_Number - File_Name - File_Size    - BuildID      -
-               - Build_Date   - File_Path - File_Version - FileID       -
-               - ProductID    - ProductID - BuildFilesID -              -
--------------------------------------------------------------------------

我的班级相似但不完全相同。例如:

ProductProperties productProperties = new ProductProperties("Notepad","090706");
Product myProduct = new Product(productProperties);
FileDetails fileDetails = new fileDetails("Notepad.exe","20kb","1.0.0.0");
myProduct.AddFile(fileDetails);
FileDetails fileDetails2 = new fileDetails("Notepad.config","5kb","1.1.2.5");
myProduct.AddFile(fileDetails2);

现在我需要将详细信息添加到SQL数据库中。

关于该工具的一些注意事项:

  • 我已经确保我的代码中存在该产品。 (以上是一个粗略的例子)
  • 我还验证了在没有构建的情况下,如果有,那么在添加新信息之前删除与该特定构建相关的所有详细信息

这是我被困的地方:

  • 所以我需要使用现有的产品ID
  • 我需要创建构建详细信息
  • 如果文件不存在,我需要添加文件;如果文件已存在,我需要获取现有的FileID
  • 然后我需要将特定文件添加到特定版本(BuildFiles表)
  • 然后我需要添加文件详细信息

所以几乎所有东西都需要,哈哈。

问题是,我不知道最好的方法。例如,我是否创建查询以查找特定产品的产品ID,然后在将该行添加到构建表时使用该产品ID?

我是否有sperate方法来查看特定产品是否存在文件,如果没有,则添加该文件?

然后当我完成所有这些操作时,我是否查询文件和构建以获取buildID和FileID,并将构建和文件添加到BuildFiles表中。

然后最后使用BuildFilesID将值添加到文件详细信息表中,首先查询buildFiles详细信息以获取ID?

或者我在这里完全错了?

如果我有20'000个文件可能就是这种情况,那么就会有成千上万的查询,所以我担心它会有点慢或疯狂。

任何想法建议和例子都会很棒!

2 个答案:

答案 0 :(得分:0)

考虑使用像Linq to SQL这样的简单对象关系映射器。它将为您创建一堆这样的脚手架代码,然后您可以使用它来实现您想要的任何逻辑。它将大大简化您的生活。

我见过的最好的例子是Scott Hanselman's talk on NerdDinner。他关于创建Linq to SQL Classes的讨论从谈话的6分30秒开始。观看大约一分钟,然后转到此博客条目:

http://www.fryan0911.com/2009/05/what-is-linq-to-sql-introduction.html

最后,Scott Guthrie在Linq to Sql上有一个很棒的博客系列:

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

答案 1 :(得分:0)

Code Monkey,

从11:00到15:30观看Hanselman's video,其中介绍了如何创建Rob Conery样式存储库。不要太担心周围的ASP.NET MVC的东西;关键是存储库对象将包含添加,删除和确定记录是否存在的方法。创建存储库后,您将能够编写如下代码:

Repository repository = new Repository();
if (!repository.exists(myFileID))
{
   myFile = new File
   {
      File_Name = myFileName;
      FilePath = myFilePath;
      ProductID = productID;
   }
   myNewFileID = repository.AddFile(myFile);
}

请注意,假设您已经为表创建了Linq to SQL类。您编写的存储库将基于这些Linq to SQL类。

今天晚些时候我将发布一些例子。