如何将新表添加到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; }
}
}
对于tblContacts,我建议您使用以下工作流程来扩展模型:
- 添加一个新的类文件来保存tblContact POCO类的定义。在该类中添加与表的列相对应的属性。属性的类型在逻辑上应该与表列的数据类型匹配。
- 在OpenAccessMetadataSource类中,添加一个新的mappingconfigurationtblcontact>并使用显式映射提供映射细节,这些映射细节在逻辑上将tblContact类与tblContacts表连接起来。确保将现有的和新的映射配置添加到配置列表。
- 通过IQueryable
属性。此属性将允许您针对tblContacts表编写LINQ查询。
关于Repository类,它似乎与应用程序的自定义逻辑相关。它肯定不是由数据访问生成的文件。因此,你需要在你的团队中讨论它。
我还强烈建议您不要在应用程序的名称空间中使用OpenAccess。这在构建期间会干扰Data Access的名称空间,并且在某些时候会导致运行时错误。