2

所以我正在尝试使用 EF 建立自定义成员资格。我真的不知道我在做什么,但到目前为止进展相当顺利。

我在 Database Initializer 步骤中,我试图在项目运行后立即将数据转储到数据库中。我的班级Application.cs使用 GUID 作为主键,如下所示。我试图弄清楚如何将该 GUID 添加到数据库中。

我不知道这是否可能,但这就是我想要做的。当您在 VS 2012 中创建一个普通的 Web 应用程序项目并尝试使用 EF Code First 重新创建该数据库时,我使用了默认登录的数据库(为了练习)。这是我到目前为止得到的。

班级

public class Applications
        {

                [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
                public Guid ApplicationId { get; set; }

                [StringLength(125)]
                public string ApplicationName { get; set; }

        }

初始化器在构建时将数据转储到数据库中(不包括种子。)

 private static List<Applications> addApplications()
    {
        var apps = new List<Applications>
        {
            new Applications
            {
                ApplicationId = Guid.NewGuid(),
                ApplicationName = "Test Login"

            }
        };

        return apps;
    }
  private static List<Memberships> addMemberships()
    {
        var mem = new List<Memberships>
        {
            new Memberships
            {
                UserId = Guid.NewGuid(),
                ApplicationId = ?, // How can this guid Match the one in  
                                   // in ApplicationId for the Application Table?
            }

        };
        return mem;
    }

我得到“Invalid Initializer member declarator”。我面临的问题是我需要ApplicationId跨多个表的 GUIDS 相同。我什至不知道这是可能的还是正确的?

我有一种感觉,我必须以某种方式分享它,也许就像

   Guid AppId;
        AppId = Guid.NewGuid();
4

1 回答 1

1

在您的会员模型中,而不是存储 GUID“ApplicationId”来尝试引用应用程序,您应该使用这样的导航属性(请参阅此链接以更好地描述导航属性):

public class Memberships
{

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid UserId { get; set; }

    //if you set your model up like this entity framework will take care of creating
    /the foreign key for you.
    public Application MemberApplication { get; set; }

}

然后只需将适当的应用程序传递给您的方法,如下所示:

private static List<Memberships> addMemberships(Application app)
{
    var mem = new List<Memberships>
    {
        new Memberships
        {
            UserId = Guid.NewGuid(),
            Application = app, 
        }

    };
    return mem;
}

像这样设置模型可以让您充分利用 oop 和关系数据库。希望有帮助。

于 2013-01-24T03:07:17.510 回答