【问题标题】:Run linq-to-sql queries on database with changing structure在具有变化结构的数据库上运行 linq-to-sql 查询
【发布时间】:2019-11-27 10:40:09
【问题描述】:
  1. 当底层数据库结构不时发生变化时是否可以运行 Linq-to-SQL 查询(我的意思是由于业务需求而发生的数据库更新,并且由于数据库在多个应用程序之间共享它可能会发生没有通知我)?

  2. 有什么方法可以在不更新源代码中的.dbml 文件的情况下连接到 Linq-to-SQL 中的新数据库结构?

  3. 如果我想在知道我的数据库结构随时间变化的情况下运行原始查询,我能否以某种方式使用 Linq-to-SQL 的任何好处?

【问题讨论】:

  • 你应该有一个属性 VERSION 的数据库并且使用版本所以代码是向后兼容的。

标签: c# entity-framework linq-to-sql


【解决方案1】:

只要您的类中的结构与您的表格相匹配(至少涵盖您需要的所有字段),您就可以做到这一点。即:罗斯文客户表实际上有4个以上的字段。如果以下 4 仍然在该表中,这将起作用:

void Main()
{
  DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");
  Table<Customer> Customers = db.GetTable<Customer>();


  var data = Customers.Where(c => c.Country == "USA");
  foreach (var customer in data)
{
        Console.WriteLine($"{customer.CustomerID}, {customer.CompanyName}");
}
}

[Table(Name = "Customers")]
public class Customer
{
    [Column]
    public string CustomerID { get; set; }
    [Column]
    public string CompanyName { get; set; }
    [Column]
    public string ContactName { get; set; }
    [Column]
    public string Country { get; set; }
}

对于原始 SQL,您可以再次使用覆盖选择列表或动态字段的类型。

注意:对于插入,要使其正常工作,不在模型中的字段应该接受 null 或具有默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多