我怎么能从另一个应用程序的数据库工作
本文关键字:数据库 工作 应用程序 另一个 怎么能 | 更新日期: 2023-09-27 17:51:21
我来问这个问题,因为我不仅不知道怎么做,而且我也不知道如何在网上搜索某种澄清。
我有一个web应用程序创建与MVC5,实体框架和代码第一,在那里我使用网格(jsgrid)。在这个应用程序中,用户登录后,他们可以看到创建的应用程序并添加新的应用程序,也可以为它们生成许可证(应用程序密钥)。
现在,我们的想法是处理来自dll模块的许可证生成器和数据库保存(仅用于许可证)。
所以,既然数据库是在MVC应用程序中创建的,我怎么能使dll模块检查到该数据库,以确保应用程序没有那个键已经,然后,保存到数据库中?
(所有这些代码都来自MVC应用程序)
DBContext:
public class LicenseDataContext : DbContext
{
public LicenseDataContext()
: base("LicenseDataContext")
{
}
public DbSet<Application> Applications { get; set; }
public DbSet<License> Licenses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
LicenseModel
public class License
{
public int ID { get; set; }
public string AppName { get; set; }
public string license { get; set; }
public string ClientName { get; set; }
public string ClientEmail { get; set; }
public Status? Status { get; set; }
public string CreatedBy { get; set; }
public string CreationDate { get; set; }
public string ModifiedBy { get; set; }
public string ModificationDate { get; set; }
public SendStatus? SendStatus { get; set; }
public string SendDate { get; set; }
}
public class LicenseFilter
{
public string AppName { get; set; }
public string license { get; set; }
public string ClientName { get; set; }
public string ClientEmail { get; set; }
public Status? Status { get; set; }
public string CreatedBy { get; set; }
public string CreationDate { get; set; }
public string ModifiedBy { get; set; }
public string ModificationDate { get; set; }
public SendStatus? SendStatus { get; set; }
public string SendDate { get; set; }
}
}
LicenseController
public class LicenseDataController : ApiController
{
MailAddress addr;
LicenseDataContext _db = new LicenseDataContext();
LicenseDataContext DB
{
get { return _db; }
}
public IEnumerable<object> Get()
{
LicenseFilter filter = GetFilter();
var result = DB.Licenses.Where(c => c.AppName == LicenseManagerController._appName &&
(String.IsNullOrEmpty(filter.AppName) || c.AppName.Contains(filter.AppName)) &&
(String.IsNullOrEmpty(filter.license) || c.license.Contains(filter.license)) &&
(String.IsNullOrEmpty(filter.ClientName) || c.ClientName.Contains(filter.ClientName)) &&
(String.IsNullOrEmpty(filter.ClientEmail) || c.ClientEmail.Contains(filter.ClientEmail)) &&
(!filter.Status.HasValue || c.Status == filter.Status)
&& (String.IsNullOrEmpty(filter.CreatedBy) || c.CreatedBy.Contains(filter.CreatedBy)) &&
(String.IsNullOrEmpty(filter.CreationDate) || c.CreationDate.Contains(filter.CreationDate)) &&
(String.IsNullOrEmpty(filter.ModifiedBy) || c.ModifiedBy.Contains(filter.ModifiedBy)) &&
(String.IsNullOrEmpty(filter.ModificationDate) || c.ModificationDate.Contains(filter.ModificationDate)) &&
(!filter.SendStatus.HasValue || c.SendStatus == filter.SendStatus) &&
(String.IsNullOrEmpty(filter.SendDate) || c.SendDate.Contains(filter.SendDate))
);
return result.ToArray();
}
private LicenseFilter GetFilter()
{
NameValueCollection filter = HttpUtility.ParseQueryString(Request.RequestUri.Query);
return new LicenseFilter
{
AppName = filter["AppName"],
license = filter["license"],
ClientName = filter["ClientName"],
ClientEmail = filter["ClientEmail"],
Status = (filter["Status"] == "0") ? (Status?)null : (Status)int.Parse(filter["Status"]),
CreatedBy = filter["CreatedBy"],
CreationDate = filter["Date"],
ModifiedBy = filter["ModifiedBy"],
ModificationDate = filter["Date"],
SendStatus = (filter["SendStatus"] == "0") ? (SendStatus?)null : (SendStatus)int.Parse(filter["SendStatus"]),
SendDate = filter["Date"]
};
}
public void Post([FromBody]License license)
{
try
{
//Here, I suppose to just call the dll to generate the license and save it, instead of doing this.
addr = new MailAddress(User.Identity.Name);
string username = addr.User;
license.AppName = LicenseManagerController._appName;
//license.license = license from module;
license.CreatedBy = username;
license.CreationDate = DateTime.Today.ToString("dd/MM/yy");
if (license.SendStatus == SendStatus.Sent)
{
license.SendDate = DateTime.Today.ToString("dd/MM/yy");
}
DB.Licenses.Add(license);
DB.SaveChanges();
}
catch (Exception insert)
{
Debug.WriteLine(insert.ToString());
}
}
有什么主意能帮我一点忙吗?
谢谢!
根据评论,我现在了解了您想要实现的要点。
使用DLL,如果你想访问特定的数据库连接字符串,那么你可以访问应用程序配置(在你的例子中是web.config)。
1)。在DLL项目中添加对System.Configuration
的引用2)。使用ConfigurationManager。ConnectionStrings属性读取应用程序(windows或web应用程序)的配置文件
现在,如果你想要一个动态连接字符串,那么你应该在你的DLL上公开一个接受连接字符串的公共方法。输入可以来自用户,也可以来自任何你能想到的来源。
另外,你可以为你的DLL添加一个配置文件,但是因为管理太麻烦了,为什么不使用引用DLL的应用程序的当前配置文件呢?:)
所以,既然数据库是在MVC应用程序中创建的,我怎么能使dll模块检查到该数据库,以确保应用程序没有那个键已经,然后,保存到数据库中?
使用数据库连接字符串定位数据库。这通常在web中指定。Config或app.config,具体取决于应用程序的类型。所有对数据库具有物理访问权限(包括适当的安全凭证)的应用程序都可以使用相同的连接字符串访问相同的数据库。
DLL模块不能自己运行。它们被加载到应用程序域中(通常是web应用程序或windows应用程序)。连接字符串通常在web中提供。