我正在观看有关[LINQ] [1]的视频并遇到了问题。在此视频中,Mike使用了一些自定义属性作为数据库名称,这对我不起作用。
我的代码(工作正常):
class MyContext : DataContext
{
public MyContext(string conStr) : base(conStr)
{
}
}
class Program
{
static void Main(string[] args)
{
MyContext ctx = new MyContext("server=.;database=AdventureWorks;Integrated Security=SSPI");
Console.WriteLine(ctx.Connection.ConnectionString);
ctx.ExecuteCommand("insert into _table (a, b) select {0}, {1}", "5", "B");
Console.WriteLine("That's it!");
Console.ReadLine();
}
}
我是多么喜欢它(在MyContext类之前注意创建对象ctx时缺少的数据库参数和数据库名称的其他自定义属性):
[Database(Name="AdventureWorks")]
class MyContext : DataContext
{
public MyContext(string conStr) : base(conStr)
{
}
}
class Program
{
static void Main(string[] args)
{
MyContext ctx = new MyContext("server=.;Integrated Security=SSPI");
Console.WriteLine(ctx.Connection.ConnectionString);
ctx.ExecuteCommand("insert into _table (a, b) select {0}, {1}", "5", "B");
Console.WriteLine("That's it!");
Console.ReadLine();
}
}
这会抛出异常'无效对象名_table',就像我不会定义任何数据库名一样。我错过了什么吗?这是我第一次使用自定义属性,...
答案 0 :(得分:1)
您仍需要阅读该属性。您必须使用反射来解析myContextConstructor中的值。
答案 1 :(得分:0)
查看使用设计器从VS创建的上下文,它在类中有一个静态成员:
private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
这里是Context类的开头:
[Database(Name = "Blah")]
public partial class TestDataContext : System.Data.Linq.DataContext
{
private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
#region Extensibility Method Definitions
partial void OnCreated();
partial void InsertAdmin(Admin instance);
partial void UpdateAdmin(Admin instance);
partial void DeleteAdmin(Admin instance);
partial void InsertUser(User instance);
partial void UpdateUser(User instance);
partial void DeleteUser(User instance);
#endregion
public TestDataContext() :
base(global::TestStuff.Properties.Settings.Default.FraudAnalystConnectionString, mappingSource)
{
OnCreated();
}
public TestDataContext(string connection) :
base(connection, mappingSource)
{
OnCreated();
}
public TestDataContext(System.Data.IDbConnection connection) :
base(connection, mappingSource)
{
OnCreated();
}
public TestDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :
base(connection, mappingSource)
{
OnCreated();
}
public TestDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) :
base(connection, mappingSource)
{
OnCreated();
}
这只是构造函数...而不是整个类......但是在选择创建Linq to Sql Classes模板之后,只需从服务器资源管理器中拖动一个表即可。