我正在观看一个约[LINQ] [1]的视频和跨问题就来了。在这段视频中,麦克使用了自定义属性的数据库名称和不适合我的工作。

我的代码(正常工作):

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();
    }
}

这抛出异常“无效的对象名称γ_表”,就像我不会定义任何数据库名称。我缺少的东西吗?它使用自定义属性是我第一次......

有帮助吗?

解决方案

您还需要读取属性。你将不得不使用反射来分析你的myContextConstructor价值。

其他提示

使用设计它在类的静态成员在从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类模板后。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top