C#dbml停止将表链接到代码

C#dbml停止将表链接到代码,c#,linq-to-sql,C#,Linq To Sql,我的C#dbml偶尔会出现问题,因为它开始无法正确链接 我不知道如何复制问题的确切原因,直到我更改了一个数据库表,然后删除了该表并用新的模式读取它之前,它一直工作得很好。 我得到的错误消息是“找不到类型或命名空间名称‘tbl’(是否缺少using指令或程序集引用?) 我发现的唯一修复方法是创建一个新的dbml,然后重新添加表并删除旧的dbml。一旦它开始像这样崩溃,那么每次我更改dbml时,我都需要重复这个修复方法,这非常令人沮丧 你知道怎么做或者为什么会这样吗 Microsoft Visual

我的C#dbml偶尔会出现问题,因为它开始无法正确链接

我不知道如何复制问题的确切原因,直到我更改了一个数据库表,然后删除了该表并用新的模式读取它之前,它一直工作得很好。 我得到的错误消息是“找不到类型或命名空间名称‘tbl’(是否缺少using指令或程序集引用?)

我发现的唯一修复方法是创建一个新的dbml,然后重新添加表并删除旧的dbml。一旦它开始像这样崩溃,那么每次我更改dbml时,我都需要重复这个修复方法,这非常令人沮丧

你知道怎么做或者为什么会这样吗

Microsoft Visual Studio 2008 版本9.0.30729.1 SP Microsoft.NET框架
版本3.5 SP1

使用L2S不必使用dbml。您可以创建自己的类来描述数据库表及其关系

以下是摘自微软的

您当然可以在不使用DBML文件的情况下使用LINQ to SQL。您所需要的只是用[Table]和[Column]属性修饰的类。例如,如果要查询简单的客户表,请定义以下类:

[Table] public class Customer
{
  [Column(IsPrimaryKey=true)]  public int ID;
  [Column]                     public string Name;
}
然后可以按如下方式开始查询:

var db = new DataContext();
var customers = db.GetTable<Customer>();
var query = customers.Where (c => c.Name.StartsWith ("a"));
var db=new DataContext();
var customers=db.GetTable();
var query=customers.Where(c=>c.Name.StartsWith(“a”);
您甚至可以手动定义关联属性-以下内容在一对多关系中为Customer和Purchase创建类:

public class DemoDataContext : DataContext
{
  public DemoDataContext (string cxString) : base (cxString) { }
  public Table<Customer> Customers { get { return GetTable<Customer>(); } }
  public Table<Purchase> Purchases { get { return GetTable<Purchase>(); } }
}

[Table] public class Customer
{
  [Column(IsPrimaryKey=true)]  public int ID;
  [Column]                     public string Name;

  [Association (OtherKey="CustomerID")]
  public EntitySet<Purchase> Purchases = new EntitySet<Purchase>();
}

[Table] public class Purchase
{
  [Column(IsPrimaryKey=true)]  public int ID;
  [Column]                     public int CustomerID;
  [Column]                     public string Description;
  [Column]                     public decimal Price;
  [Column]                     public DateTime Date;

  EntityRef<Customer> custRef;

  [Association (Storage="custRef",ThisKey="CustomerID",IsForeignKey=true)]
  public Customer Customer
  {
    get { return custRef.Entity; } set { custRef.Entity = value; }
  }
}
公共类DemoDataContext:DataContext
{
公共解调器上下文(字符串cxString):基(cxString){}
公共表客户{get{return GetTable();}}
公共表{get{return GetTable();}}
}
[表]公共类客户
{
[列(IsPrimaryKey=true)]公共int-ID;
[列]公共字符串名称;
[关联(OtherKey=“CustomerID”)]
public EntitySet Purchases=new EntitySet();
}
[表]公共类购买
{
[列(IsPrimaryKey=true)]公共int-ID;
[列]公共int CustomerID;
[列]公共字符串描述;
[栏目]公开十进制价格;
[列]公共日期时间日期;
EntityRef custRef;
[关联(Storage=“custRef”,ThisKey=“CustomerID”,IsForeignKey=true)]
公众客户
{
获取{return custRef.Entity;}设置{custRef.Entity=value;}
}
}

好的,我刚刚在dbml中添加了另一个表,它再次破坏了链接。非常令人沮丧,我在VB.net中从未遇到过这种情况……Nicholas,谢谢你的回答,这是一个非常有趣的解决方案,但是,我想修复我的visual studio问题,我认为C#dbml的东西中有一个bug,或者什么的?它看起来像数据类每当我添加或更改gui dbml文件arghhh时,都会删除es1.designer.cs