如何将新表添加到Telerik开放访问MVC项目

本文关键字:访问 MVC 项目 Telerik 新表 添加 | 更新日期: 2023-09-27 17:54:32

我继承了一个MVC项目,它似乎使用Telerik Open Access来处理数据,而不是使用我更熟悉的实体框架。我试图理解如何使用这个数据方法的整个概念,但现在我只需要找出如何添加表。我将代码示例限制在一个表中,但实际上有几十个。

所以我看到类OpenAccessContext.cs有一个数据库连接字符串,但它也有一个IQueryable项目组成的类tblMaterial。tblMaterial类在tblMaterial.cs中定义。我不明白这个类是如何连接到SQL数据库版本的tblMaterial(所以请随时教育我)。

我在SQL数据库中有一个名为tblContacts的表。我需要做些什么才能将它连接到我的项目?当我右键单击解决方案中的任何对象时,没有"从数据库更新"选项(因为它们都只是类)。我需要手动创建一个名为tblContacts.cs的新类吗?如果是,我如何连接到数据库版本的tblContacts?我是否需要手动更改多个类来添加表(OpenAccessContext, MetadataSources, Repository等)?

我试着把这个作为一个简单的问题(我如何添加一个表),所以我不会被弄糊涂,但是任何你能在Telerik开放获取上发光的光都会有所帮助。(请不要因为我这么问而责备我!)我在这里查看了Telerik文档:http://docs.telerik.com/data-access/developers-guide/code-only-mapping/getting-started/fluent-mapping-getting-started-fluent-mapping-api,但它与设置新的开放访问解决方案有关。我需要知道如何修改一个(不破坏已经工作的代码)。提前感谢您的帮助!

下面是Visual Studio中看到的解决方案:

  • 开放获取
      性>引用
    • OpenAccessContext.cs
    • OpenAccessMetadataSources.cs
    • Repository.cs
    • tblMaterial.cs

代码如下:

OpenAccessContext.cs

namespace OpenAccess
{
public partial class OpenAccessContext : OpenAccessContext
{
    static MetadataContainer metadataContainer = new OpenAccessMetadataSource().GetModel();
    static BackendConfiguration backendConfiguration = new BackendConfiguration()
    {
        Backend = "mssql"
    };
    private static string DbConnection = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
    private static int entity = ConfigurationManager.AppSettings["Entity"] == "" ? 0 : int.Parse(ConfigurationManager.AppSettings["Entity"]);
    public OpenAccessContext() : base(DbConnection, backendConfiguration, metadataContainer)
    {
    }
    public IQueryable<tblMaterial> tblMaterials
    {
        get 
        { 
            return this.GetAll<tblMaterial>(); //.Where(a => a.EntityId == entity);
        }
    }
 }
}

OpenAccessMetadataSources.cs

namespace OpenAccess
{
public class OpenAccessMetadataSource : FluentMetadataSource
{
    protected override IList<MappingConfiguration> PrepareMapping()
    {
        var configurations = new List<MappingConfiguration>();
        // tblMaterial
        var materialConfiguration = new MappingConfiguration<tblMaterial>();
        materialConfiguration.MapType(x => new
        {
            MaterialId = x.MaterialId,
            MaterialName = x.MaterialName,
            MaterialDescription = x.MaterialDescription,
            MaterialActive = x.MaterialActive,
            MaterialUsageType = x.MaterialUsageType,
            AddDate = x.AddDate,
            AddBy = x.AddBy,
            ModDate = x.ModDate,
            ModBy = x.ModBy
        }).ToTable("tblMaterial");
        materialConfiguration.HasProperty(x => x.MaterialId).IsIdentity(KeyGenerator.Autoinc);
     }
  }
}

Repository.cs

namespace OpenAccess
{
public class Repository : IRepository
{
    #region private variables
    private static OpenAccessContext dat = null;
    #endregion private varibles
    #region public constructor
    /// <summary>
    /// Constructor
    /// </summary>
    public Repository()
    {
        if (dat == null)
        {
            dat = new OpenAccessContext();                
        }
    }
    #endregion public constructor
    #region Material (tblMaterials)
    public int CreateMaterial(tblMaterial itm)
    {
        try
        {
            dat.Add(itm);
            dat.SaveChanges();
            return itm.MaterialId;
        }
        catch (Exception)
        {
            return 0;
        }
    }
 }
}

tblMaterial.cs

namespace OpenAccess
{
public class tblMaterial
{
    public int MaterialId { get; set; }
    public string MaterialName { get; set; }
    public string MaterialDescription { get; set; }
    public bool MaterialActive { get; set; }
    public int MaterialUsageType { get; set; }
    public DateTime? AddDate { get; set; }
    public string AddBy { get; set; }
    public DateTime? ModDate { get; set; }
    public string ModBy { get; set; }
}
}

如何将新表添加到Telerik开放访问MVC项目

对于tblContacts,我建议您使用以下工作流程来扩展模型:

  1. 添加一个新的类文件来保存tblContact POCO类的定义。在该类中添加与表的列相对应的属性。属性的类型在逻辑上应该与表列的数据类型匹配。
  2. 在OpenAccessMetadataSource类中,添加一个新的mappingconfigurationtblcontact>并使用显式映射提供映射细节,这些映射细节在逻辑上将tblContact类与tblContacts表连接起来。确保将现有的和新的映射配置添加到配置列表
  3. 通过IQueryable属性。此属性将允许您针对tblContacts表编写LINQ查询。

关于Repository类,它似乎与应用程序的自定义逻辑相关。它肯定不是由数据访问生成的文件。因此,你需要在你的团队中讨论它。

我还强烈建议您不要在应用程序的名称空间中使用OpenAccess。这在构建期间会干扰Data Access的名称空间,并且在某些时候会导致运行时错误。