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

时间:2010-05-03 19:45:21

标签: c# linq-to-sql

我的C#dbml偶尔出现问题,因为它开始没有正确链接。

我不知道如何复制问题的确切原因,它完全正常工作,直到我更改了数据库表,然后删除了表并使用新架构重新读取它。 我得到的错误消息是“无法找到类型或命名空间名称'tbl'(您是否缺少using指令或程序集引用?)

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

任何想法该怎么做或为什么会这样?

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

1 个答案:

答案 0 :(得分:0)

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

以下是Microsoft Data Developer Center

的摘录

你可以在没有DBML文件的情况下使用LINQ to SQL。您只需要使用[Table]和[Column]属性修饰的类。例如,如果要查询简单的Customer表,请定义以下类:

[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"));

您甚至可以手动定义关联属性 - 以下为one:many关系创建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; }
  }
}