在MVC 5中访问生成的数据模型以及单独的数据模型

时间:2015-08-29 06:49:18

标签: c# entity-framework asp.net-mvc-5 asp.net-identity

我有一个新构建的MVC 5应用程序,使用默认模板PayCaddy.Client。在构建时,没有任何mod,项目会创建自己的数据模型,覆盖ApplicationUser等实体进行身份验证。我喜欢这个,只是创建项目,它已经准备好让我做自己的事情而不用太担心身份验证。

然而,现在,我自己的东西在一个单独的项目PayCaddy.Data中包含一个单独的业务数据模型,其中包括在高尔夫游戏中下注的实体:

public class Bet: PayCaddyEntity
{
    public virtual string BetName { get; set; }
    public virtual int Amount { get; set; }
    public virtual ApplicationUser Owner { get; set; }
    public virtual DateTime OpenedOn { get; set; }
    public virtual DateTime? ClosedOn { get; set; }
    public ICollection<BetUser> Punters { get; set; }
}

此处使用ApplicationUser来表示发起投注的用户,该投注将介于他们与Punters之间。这使我陷入循环引用问题,我需要PayCaddy.Client实体的ApplicationUser引用,该项目需要Bet实体的引用。

Identity框架非常复杂,简单地将其实体移动到我的数据模型中是不可能的。现在,我已将我的数据模型移动到客户端项目中,与身份代码相同,但如果有一种相对简单的方法可以克服此问题,我不想继续这样做。如果存在没有多天努力的解决方案,它们是什么?

1 个答案:

答案 0 :(得分:0)

您是否可以尝试将ApplicationUser对象移出MVC项目并将其移动到新项目中。那样你的所有模型都在一个项目中,而你的MVC应用程序只能有一个对数据项目的引用?

OP编辑:只是一个警告:如果您将var dt = new Date(); dt.setTime(dt.getTime() + (60 * 60 * 1000)); // ^^^^^^^^^^^^^^---- one hour in milliseconds, // which is our offset from UTC/GMT var hours = dt.getUTCHours(); // Use UTC methods to get time var minutes = dt.getUTCMinutes(); var seconds = dt.getUTCSeconds(); 移到自己的数据模型中,则必须从ApplicationUser派生DbContext,而不是IdentityDbContext<ApplicationUser>普通的DbContext,您在base.OnModelCreating(modelBuilder)中致电OnModelCreating至关重要。通常,基本方法没有实现,但是这里有大约70行配置代码,这对于这个数据模型是必不可少的。