gpt4 book ai didi

.net - 使用 LINQ to SQL 类所需的帮助

转载 作者:行者123 更新时间:2023-12-04 06:38:16 24 4
gpt4 key购买 nike

已经生成了默认类。有2个: 1.DataContext 2.表对象类

现在 :
1.如何向数据类添加功能(扩展)。我创建了单独的部分类。

  • 我需要对数据上下文进行任何扩展吗?
  • 我需要在我自己的自定义构造函数中调用生成类构造函数吗?
  • 如何创建数据类的新实例?

  • 一个问题是 DB 名称(Databahn)和(我不知道还有什么)被 dbml 紧密连接。如果我将来更改我的数据库名称等,这会如何?

    我可以更改类名吗?不希望它们与 DB 表名相同?
    [global::System.Data.Linq.Mapping.DatabaseAttribute(Name="Databahn")]

    public partial class AgentsDataContext : System.Data.Linq.DataContext

    最佳答案

    我通常会为 Linq to Sql 手动滚动我自己的数据上下文和数据对象。我将创建一个示例数据上下文、表对象和检索器方法,以在这里展示我的小自制策略。我们会说我的数据库名称是“Main”,我的表对象将是 sql 中的“dbo.Person”。

    开始:

    DataContext 代表我的数据库:

    internal class MainDataContext : System.Data.Linq.DataContext
    {
    private static MappingSource _mappingSource = new AttributeMappingSource();

    internal MainDataContext(string connectionString)
    : base(connectionString, _mappingSource) {}

    internal Table<PersonDto> PersonDtos { get { return GetTable<PersonDto>(); } }
    }

    Dto 代表我的 table :
    [Table(Name = "dbo.Person")]
    internal class PersonDto
    {
    private Guid _id;
    [Column(Storage = "_id", IsPrimaryKey = true)]
    public Guid Id
    {
    get { return _id; }
    set { _id = value; }
    }

    private string _name;
    [Column(Storage = "_name")]
    public string Name
    {
    get { return _name; }
    set { _name = value; }
    }

    private DateTime _dateCreated;
    [Column(Storage = "_dateCreated")]
    public DateTime DateCreated
    {
    get { return _dateCreated; }
    set { _dateCreated = value; }
    }
    }

    现在终于 PersonRetriever 类:
    public class PersonRepository
    {
    private string _connectionString;

    public PersonRepository(string connectionString)
    {
    _connectionString = connectionString;
    }

    string GetPersonName(Guid personId)
    {
    using (var db = new MainDataContext(_connectionString))
    {
    string personName = string.Empty;

    PersonDto person = db.PersonDtos.FirstOrDefault(c => c.Id == personId);

    if (person != null)
    {
    personName = person.Name;
    }

    return personName;
    }
    }
    }

    需要注意的几点:我在数据上下文中声明了一个静态映射源以传递给基本数据上下文,仅用于在执行预编译的 linq 查询时保持状态。没有必要,有一个只接受连接字符串的基本构造函数。

    此外,请确保在声明 Dtos 时,公共(public)属性名称与数据库中的表完全匹配。您的私有(private)成员(member)可以随意命名。

    希望这可以帮助!

    关于.net - 使用 LINQ to SQL 类所需的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4605408/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com