我正在开发一个MVC 5应用程序.我想在我的控制器方法中的 [Display(Name ="")]属性中获取任何类的任何属性的值.
我的模型如下:
public partial class ABC
{
[Required]
[Display(Name = "Transaction No")]
public string S1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我看过这个问题的答案,但这是一个有点冗长的程序.我正在寻找随时可用和内置的东西.
所以,我试过这个:
MemberInfo property = typeof(ABC).GetProperty(s); // s is a string type which has the property name ... in this case it is S1
var dd = property.CustomAttributes.Select(x => x.NamedArguments.Select(y => y.TypedValue.Value)).OfType<System.ComponentModel.DataAnnotations.DisplayAttribute>();
Run Code Online (Sandbox Code Playgroud)
但我有两个问题,首先我没有得到价值,即"交易否".其次,尽管我已经提到.OfType <>我仍然得到所有属性,即[Display(Name ="")]和[Required].
但幸运的是我获得了"交易否"的价值
property >> CustomAttribute >> [1] >> NamedArguments >> [0] >> TypedValue >> Value ="Transaction No"
由于 …
在传统asp.net和asp.net MVC中,我们可以很容易地检查,如果请求来自移动设备的使用IsMobileDevice要求的属性(System.Web.HttpContext.Current.Request.Browser.IsMobileDevice),但在asp.net核心由于巨大的结构和建筑改变Request类(Microsoft.AspNetCore.Http.Request),这个属性( Browser.IsMobileDevice) 不存在了。微软是否有任何官方 的 .NetCore等价物来解决这个问题(我的意思是实用方法或其他东西)??。
请注意,我可以通过检查Request如下类的用户代理属性来轻松编写一个方法来执行此操作,但它并不完全可靠,因为由于用户代理的多样性以及更新和添加新的用户代理,我无法授予我的正则表达式变量覆盖所有可能的用户代理,而且我必须不时更新它们(正则表达式变量值)以保持它们最新。
这是我的代码,但我不想使用它,但这不是一个好习惯。我正在寻找更好的选择
static Regex MobileCheck = new Regex(@"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);
static Regex MobileVersionCheck = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);
public static bool BrowserIsMobile(Request request)
{
var u = request.Headers["HTTP_USER_AGENT"].ToString(); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个MVC 5应用程序.最初我使用EF6 DataBase第一种方法使用单个数据库,我使用我的DbContext实例访问我的数据库,该数据库有102个表.我将其实例声明为:
private MyEntities db = new MyEntities();
现在我想允许多家公司使用我的应用程序,为此我必须为每个新公司创建一个新的数据库.我通过向DbContext声明另一个构造函数来实现此目的,如下所示:
public partial class NewEntities : DbContext
{
public NewEntities(string name)
: base(name)
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其实例声明为:
public NewEntities de = new NewEntities((ConfigurationManager.ConnectionStrings["NewEntities123"]).ToString());
Run Code Online (Sandbox Code Playgroud)
然后我打电话
db.Database.Create();
我的新数据库已成功创建.但是在这个方案中,每次我想添加数据库时,我都必须在我的Web.config文件中声明一个新的连接字符串.
是否有任何方法,根据配置文件中的公司名称自动生成连接字符串,然后传递给构造函数以创建具有该名称的新数据库?
此外,我想为每个公司使用相同的"db"实例和DbContext访问我的所有控制器方法,以便我的相同代码可以用于所有公司.如何为多个数据库访问单个DbContext及其实例?
我已经看过这个问题,因为它说没有方法.但那么我的应用程序如何适用于多个用户?
我正在开发一个使用EF 6数据库第一种方法的MVC 5应用程序.现在我希望我的DbContext基于不同的用户访问多个数据库.为此,我在Web.Config文件中生成了一个连接字符串:
string str = u.Users.Where(x => x.UserName == HttpContext.User.Identity.Name).First().ConnStr;
var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
ConnectionStringSettings c = new ConnectionStringSettings();
c.ConnectionString = str;
c.Name = u.Users.Where(x => x.ConnStr == str).First().DbName;
c.ProviderName = "System.Data.SqlClient";
section.ConnectionStrings.Add(c);
configuration.Save();
Run Code Online (Sandbox Code Playgroud)
配置文件中生成的连接字符串是:
<add name="Awais123" connectionString="Data Source=.;Initial Catalog=Awais123;integrated security=True;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
我制作EDMX时由EF生成的连接字符串是:
<add name="ABCEntities" connectionString="metadata=res://*/Models.awais.csdl|res://*/Models.awais.ssdl|res://*/Models.awais.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=Awais;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
然后我重载了我的Entities构造函数:
public ABCEntities(string nameorConnString) : base(nameorConnString) {}
Run Code Online (Sandbox Code Playgroud)
默认的构造函数是:
public ABCEntities() : base("name=ABCEntities") {}
Run Code Online (Sandbox Code Playgroud)
现在我在另一个.cs文件中声明另一个DbContext类来生成数据库:
public partial class NewDbGen : DbContext
{ …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc entity-framework ef-code-first ef-database-first
我正在使用Entity Framework 6开发Web API。我必须执行一个复杂的SQL查询,该查询从多个表中获取数据,如代码所示。我已经尝试过,但是出现以下错误:
数据读取器具有多个字段。多个字段对于EDM原语或枚举类型无效。
该查询在SSMS查询分析器中成功返回了数据。
[HttpGet]
public IHttpActionResult getJobNo(string cmpCode, string branchCode)
{
string query = string.Format(
@"select
M.S1, M.S2, C.S2 As S30, M.S3, SC.S2 As S31, M.D1, M.S5,
JT.S2 As S32, M.S6, TM.S2 As S33, M.S10
from
MERTRM M, CMF C, CMFS SC, PMCD JT, PMCD TM
where
M.S100 = 'JOB' and M.S102 = '{0}' and
M.S108 = '{1}' and
M.S101 not in('U', 'C', 'F') and
M.S2 = C.S1 and C.S102 = '{0}' and
C.S100 = 'CC' and …Run Code Online (Sandbox Code Playgroud)