0

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

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

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

我试图将其保留为一个简单的问题(如何添加表格),因此我不会感到厌烦,但是您可以在 Telerik Open Access 上发光的任何光线都会有所帮助。(请不要问我这个问题!)我在这里查看了 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
    • 存储库.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);
     }
  }
}

存储库.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; }

}
}
4

1 回答 1

1

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

  1. 添加一个包含 tblContact POCO 类定义的新类文件。在此类中添加将对应于表的列的属性。属性的类型应该在逻辑上匹配表列的数据类型。
  2. 在 OpenAccessMetadataSource 类中,为 tblContact 类添加一个新的 MappingConfiguration<tblContact>,并使用显式映射提供将 tblContact 类与 tblContacts 表逻辑连接的映射详细信息。确保将现有的和新的映射配置都添加到配置列表中
  3. 通过上下文中的 IQueryable<tblContact> 属性公开新添加的类。此属性将允许您针对 tblContacts 表编写 LINQ 查询。

关于 Repository 类,它似乎与应用程序的自定义逻辑有关。它肯定不是由 Data Access 生成的文件。因此,您需要在团队中讨论它。

我还强烈建议您不要在应用程序的命名空间中使用 OpenAccess。众所周知,这会在构建期间干扰数据访问的命名空间,并且在某些时候会导致运行时错误。

我希望这有帮助。

于 2015-06-10T14:31:19.623 回答