0

我正在尝试在 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)。

有什么方法可以让实体框架做到这一点,还是我必须向子类添加任意 ID?

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

4

1 回答 1

0

试试这个:

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

    public string a;
    public string b;
}
于 2013-08-20T21:53:40.330 回答