如何向Telerik Open Access MVC项目添加新表?

时间:2015-06-09 15:15:37

标签: c# asp.net-mvc telerik telerik-mvc telerik-open-access

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

所以我看到类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
    • 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; }

}
}

1 个答案:

答案 0 :(得分:1)

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

  1. 添加一个新的类文件,该文件将包含tblContact POCO类的定义。在此类中添加将与表的列对应的属性。属性的类型应在逻辑上与表列的数据类型匹配。
  2. 在OpenAccessMetadataSource类中,添加一个新的MappingConfiguration&lt; tblContact&gt;对于tblContact类,使用explicit mapping提供了逻辑上将tblContact类与tblContacts表连接的映射详细信息。 确保将现有和新映射配置添加到配置列表
  3. 通过IQueryable&lt; tblContact&gt;公开新添加的课程。在上下文中的属性。此属性允许您根据tblContacts表撰写LINQ查询。
  4. 关于Repository类,它似乎与应用程序的自定义逻辑有关。它肯定不是Data Access生成的文件。因此,您需要在团队中进行讨论。

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

    我希望这会有所帮助。