这一直困扰着我多年.
回到过去,当我们搜索自己的食物并使用DataSet时,您可以通过从顶部的下拉列表中选择所需内容来捕捉DataSet中的特定表.
如果我有一个很大的'Linq2Sql DBML文件,里面有很多表,那么导航就变成了一场噩梦.有没有办法跳转到特定的表?
我在使用DBML时遇到了一些问题.每次团队需要将更改同步到SVN时,DBML都会更改,从而产生大量冲突.这似乎与dbml编辑器中的某些重新排列有关,因为如果在编辑器中打开dbml文件,.dmbl.layout中的大多数associationConnector部分似乎在开发期间都会更改.
您是否有任何最佳做法可以避免这些布局重新布置,这些布局可能需要一个多小时才能修复?
最好的问候,古斯塔沃
如何生成dbml文件?
在Visual Studio文件中,项目包含一个DBML文件,该文件在打开时显示数据库的非常酷的表示图形以及表之间的所有互连.
我希望将其用于另一个项目以用于文档目的.数据库已存在.那么我如何从具有所有关键关系和众所周知的整个九码的sql server数据库中获得ta DBML文件的酷图形表示,如visual studio中所示.
我在互联网上用几个搜索引擎进行了一些搜索,到目前为止,我看到的一切都是在另一个方向上工作,例如"从DBML文件创建数据库?"
它似乎与LINQ有关,但我还没有找到解释.
如何记录使用LINQ to SQL DBML自动生成的类和属性和函数?
我设法通过在另一个文件中定义相同的部分类来为datacontext类提供文档,<summary>因此如果DBML被刷新则不会被删除
/// <summary>
/// Linq to SQL datacontext
/// </summary>
public partial class LinqDBDataContext {
}
Run Code Online (Sandbox Code Playgroud)
这适用于表映射类,其中一个缺点是必须手动维护添加/删除表的单独类.
另外一件事.我在存储过程中有类似注释的文档(作者,日期和描述),不应该作为函数的文档提取到代码文件中吗?
-- =============================================
-- Author: <Katia Aleid>
-- Create date: <2015-04-01>
-- Description: <Performs search for the users>
-- =============================================
ALTER PROCEDURE [dbo].[SearchUsers] ....
Run Code Online (Sandbox Code Playgroud)
是否可以排除DBML表单C#文档并改为使用单独的数据库文档?
我使用LinqToSql使用SqlMetal来为我的ASP.net应用程序提供我的DataContext.dbml类.当我最初创建DataContext.dbml文件时,Visual Studio使用它来创建相关的DataContext.designer.cs文件.此设计器文件包含C#中的DataContext类,该类在整个应用程序中使用(并且源自dbml文件中的XML),对于弥合SqlMetal的输出与使用LinqToSql的DataContext之间的差距至关重要.
但是,当我对数据库进行更改并重新创建dbml文件时,设计器文件永远不会在我的网站中重新生成.而是维护旧的设计器文件(因此,无法通过LinqToSql DataContext类访问DBML文件的任何更改).
到目前为止,我能够使用的唯一过程是重新生成设计器文件
当检测到一个还没有designer.cs文件的新dbml文件时,Visual Studio似乎只会生成designer.cs文件.这个过程是非常不切实际的,因为它涉及几个手动步骤并且使用源代码控制来搞乱.
有谁知道如何自动重新生成designer.cs文件而无需遵循上面概述的手动删除/刷新/重新生成/删除过程?
我的策略是保持项目布局的清洁.鉴于这是一个数据层项目,我将为每个相关实体提供一个类文件,我想我会把.dbml放到它自己的目录中.事实证明,将.dbml文件定位在子目录中会将其转换为排序的较低级别命名空间.
这是一个C#类库项目.
我可以关闭此功能的任何提示,并且可以访问LinqToSql dbml datacontext名称而无需键入目录名来访问实际的LinqToSql类?
在这种方法中
public static void Detach()
{
try
{
using (var master = new DataContext(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True"))
{
master.ExecuteCommand(string.Format("ALTER DATABASE [{0}] SET OFFLINE WITH ROLLBACK IMMEDIATE", DatabaseFile));
master.ExecuteCommand(string.Format("exec sp_detach_db '{0}'", DatabaseFile));
}
}
catch (Exception e)
{
... // add to log
}
}
Run Code Online (Sandbox Code Playgroud)
我可以收到例外
System.Data.SqlClient.SqlException(0x80131904):数据库'blablabla.mdf'不存在.提供有效的数据库名称.要查看可用的数据库,请使用sys.databases.
如果Detach()在未附加数据库时调用,则会发生这种情况.
我的问题是:如何只吞下这个特定的消息以避免记录它?
文本可能已本地化,因此无法使用
if(!(e is SqlException && e.Message.Contains("Supply a valid database name")))
... // log
Run Code Online (Sandbox Code Playgroud)
我不确定错误代码是否对于这个特定情况是唯一的(google证明了吗?)
if(!(e is SqlException && e.Message.Contains("0x80131904")))
... // log
Run Code Online (Sandbox Code Playgroud)
我当然能做到
try { ... } catch {} …Run Code Online (Sandbox Code Playgroud)