我们有一个数据库来执行我们的运营。应用程序从Oracle数据库中获取记录,MSSQL正在处理这些记录,使用生物识别机器数据计算它们,然后将这些信息存储到MSSQL中。在开发机器上,我安装了sql-express 2008,而在生产服务器上安装了Sql Server 2005。我需要存储用户帐户及其身份验证详细信息,角色,还需要在用户与其他实体之间建立关系。
有没有办法将User表映射到EF模型,以便我们可以将它与其他实体相关联?
- 我们可以将ASPNETDB.MDF作为所有实体的主数据库吗?
- 我们可以将用户角色,用户配置文件,成员资格信息和相应的存储过程从ASPNETDB迁移到另一个db吗?
编辑:
我发现这篇文章http://www.asp.net/mvc/tutorials/older-versions/security/authenticating-users-with-forms-authentication-cs帮助我找出了使用aspnet_regsql实用程序为任何SQL服务器数据库配备成员资格,用户,配置文件表和存储过程的方法。
更新:
在AccountsModel中,我创建了一个AccountDetails类。
public class AccountDetails : ProfileBase
{
public int TerminalId { get; set; }
}
&安培;在TerminalModel:
public ICollection<AccountDetails> UserProfiles { get; set; }
实际上,我只需要在Users表中添加一个额外的属性(FK)TerminalId。但是文档建议在User表中附加属性,我们需要使用profile。那么使用上面的代码如何从UserProfiles获取MembershipUser集合?我是否应该遍历集合,或者是否有任何流畅的方式来执行操作......如:
public static ICollection<MembershipUser> GetUsersFromProfiles(ICollection<AccountDetails> mProfiles)
{
/* it is not accepting the Membership.GetAllUsers()...
Error: "Could not find an implementation of the query pattern for source
type 'System.Web.Security.MembershipUserCollection'. 'Where' not found.
Consider explicitly specifying the type of the range variable 'm'.*/
return (from m in Membership.GetAllUsers()
where m.UserName = mProfiles.SelectMany(profile=>profile.UserName)
select m);
}
当我尝试在ConvertToTerminalArray方法中保存记录时:
public class Terminal
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 2)]
[Display(Name = "Terminal Name")]
public string TerminalName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 2)]
[Display(Name = "Location")]
public string Location { get; set; }
public static Terminal[] ConvertToTerminalArray(string terminalName = "Tango 1")
{
ApplicationServices db = new ApplicationServices();
// var dsd=new CreateDatabaseIfNotExists<ApplicationServices>();
// dsd.InitializeDatabase(db);
Terminal [] terminal = new Terminal[1];
terminal[0] = new Terminal();
terminal[0].TerminalName=terminalName;
terminal[0].Location = "South West Coast";
db.Terminals.Add(terminal[0]);
db.SaveChanges();
return terminal;
}
}
它给了我这个错误:
无效的对象名称'dbo.Terminals'。描述:未处理 在执行当前Web请求期间发生异常。 请查看堆栈跟踪以获取有关错误的更多信息 它起源于代码。
异常详细信息:System.Data.SqlClient.SqlException:无效的对象 名字'dbo.Terminals'。
来源错误:
第34行:终端[0] .Location =“South West Coast”;线 35:db.Terminals.Add(terminal [0]);第36行:
db.SaveChanges();第37行:第38行:返回终端;
ApplicationServices(context)看起来像:
public class ApplicationServices : DbContext
{
public ApplicationServices()
{
Database.SetInitializer(new CreateDatabaseIfNotExists<ApplicationServices>());
}
public DbSet<Terminal> Terminals { get; set; }
}
请帮忙。