我正在尝试在 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 的一部分。