我开始问这个问题,因为我不仅知道怎么做,而且我不知道如何搜索网页以获得某种澄清。
我有一个使用MVC5,实体框架和Code First创建的Web应用程序,我使用网格(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());
}
}
有什么想法可以帮助我一点点吗?
谢谢!
答案 0 :(得分:0)
因此,由于数据库是在MVC应用程序中创建的,我如何让dll模块检入该数据库,以确保应用程序没有该密钥,然后将其保存到数据库中?
使用数据库连接字符串定位数据库。这通常在web.config或app.config中指定,具体取决于应用程序的类型。所有对数据库具有物理访问权限的应用程序(包括适当的安全凭证)都可以使用相同的连接字符串来访问同一数据库。
DLL模块不能独立运行。它们被加载到应用程序域(通常是Web应用程序或Windows应用程序)。连接字符串通常在引用和加载DLL的程序的web.config或app.config中提供。
答案 1 :(得分:0)
根据评论,我现在掌握了你想要实现的目标。
使用DLL,如果要访问特定的数据库连接字符串,则可以访问应用程序配置(在您的情况下是web.config)。
1。)在DLL项目中添加对System.Configuration
的引用
2.)使用ConfigurationManager.ConnectionStrings Property读取应用程序的配置文件(Windows或Web应用程序)
现在,如果你想要一个动态连接字符串,那么你应该在你的DLL上公开一个接受连接字符串的公共方法。输入可以来自用户或您可能提出的任何来源。
此外,您可以为您的DLL添加配置文件,但由于管理起来太麻烦,为什么不使用引用DLL的应用程序的当前配置文件呢? :)