我继承了一个似乎使用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
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; }
}
}
答案 0 :(得分:1)
对于tblContacts,我建议您使用以下工作流来扩展模型:
关于Repository类,它似乎与应用程序的自定义逻辑有关。它肯定不是Data Access生成的文件。因此,您需要在团队中进行讨论。
我还强烈建议您不要在应用程序的命名空间中使用OpenAccess。众所周知,这会干扰数据访问。命名空间在构建时,在某些时候会导致运行时错误。
我希望这会有所帮助。