我的C#dbml偶尔出现问题,因为它开始没有正确链接。
我不知道如何复制问题的确切原因,它完全正常工作,直到我更改了数据库表,然后删除了表并使用新架构重新读取它。 我得到的错误消息是“无法找到类型或命名空间名称'tbl'(您是否缺少using指令或程序集引用?)
我找到的唯一修复是创建一个新的dbml然后重新添加表并删除旧的dbml。一旦它开始像这样打破,那么每次我更改dbml时,我都需要重复这个修复非常令人沮丧。
任何想法该怎么做或为什么会这样?
Microsoft Visual Studio 2008 版本9.0.30729.1 SP Microsoft .NET Framework 版本3.5 SP1
答案 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; }
}
}