我正在使用.NET成员资格和使用Entity Framework进行数据访问的MVC 3应用程序。我很擅长使用这些技术。当我试图将应用程序数据与特定用户联系起来时,我一直在遇到挂起。
因此,假设您有一个使用.NET成员资格提供程序创建的用户,并且您创建了应该专门与该用户绑定的某些应用程序对象。每个用户都可以访问他们自己的这些对象列表。我很好奇最佳做法是什么。我需要在这些应用程序对象上创建一个外键,以便我知道它们属于某个用户。我只是不确定那个值应该是什么。
另外,假设您有一个管理员用户,可以查看每个用户的所有这些应用程序对象以及他们属于哪个用户?使用Entity Framework我希望能够运行这样的查询。但是,您通常没有代表成员资格对象的实体。
希望我能很好地说明我的困惑。如果我不清楚,请告诉我。任何人都可以给予任何帮助将不胜感激。
由于
答案 0 :(得分:0)
每当我开发一个超出.NET Membership Provider提供的应用程序时,我会在应用程序数据库中为用户,用户配置文件和角色创建自己的表。这将使您可以灵活地设计要在用户上维护的信息,然后您可以使用EF来访问该信息。你使用什么EF方法;它是代码优先,模型优先还是数据库优先?如果您使用的是代码优先,EF将通过在DB中创建类型为int的对象ID来创建关系,这些对象ID设置为“Is Identity”并且自我增量。您可以通过在对象上使用属性属性来覆盖它,如下所示:
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
使用int提供更高效的索引,但如果您使用复制或分布式数据库,Guid是有益的。如果使用模型优先或数据库优先方法,则可以使用任一选项来维护对象之间的关系。通过使用对象ID的概念而不是使用其他主键,用户可以在不弄乱表关系的情况下更改用户信息。例如,如果用户表的主键是用户名,并且用户决定更改其用户名,则您还必须更新所有外键。
通过将会员信息移动到您的应用程序中,您可以更灵活地定义会员信息和其他应用程序实体之间的关系,从而可以让您执行您正在寻找的查询。