实体框架密钥列表

时间:2013-08-20 21:47:26

标签: c# entity-framework

我正在尝试在Code First模式下使用Entity Framework来尝试存储一些对象,而我在生成密钥方面遇到了麻烦(或者我不想更改现有对象来插入密钥) 。这是我遇到的问题的一个例子:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
public class AClass
{
    [Key]
    public int id { get; set; }
    public List<SubClass> l;
};

public class SubClass
{
    public string a;
    public string b;
};

public class ADbContext : DbContext
{
    public DbSet<AClass> dbset { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        ADbContext db = new ADbContext();

        AClass a = new AClass();

        a.id = 1;
        a.l = new List<SubClass>();

        SubClass sc=new SubClass();

        sc.a = "Hello";
        sc.b = "World";

        a.l.Add(sc);

        SubClass sca = new SubClass();

        sca.a = "Stack";
        sca.b = "Overflow";

        a.l.Add(sca);

        db.dbset.Add(a);
        db.SaveChanges();
    }
}
}

如果您运行此程序,则表示对象SubClass没有主键时出错。现在,如果我手动编写程序而不使用Entity Framework将这些对象存储在数据库中,那么我要做的就是拥有如下表:

AClass:
id int public key

SubClass:
AClass_id int foreign key references AClass(id),
postition_in_list_id int, 
a string,
b string,
primary key (AClass_id,position_in_list_id)

我会说对于ID为1的AClass,如果你明白我的意思,我会有SubClass(1,1),(1,2),(1,3)。

有没有办法让Entity Framework执行此操作,还是必须向SubClass添加任意ID?

除了作为AClass的一部分外,SubClass永远不会存储在数据库中。

1 个答案:

答案 0 :(得分:0)

试试这个:

public class SubClass
{
    [ForeignKey("AClass")]
    [Key]
    public int AClassId {get; set;}

    public string a;
    public string b;
}