Validation 在EntityFramework4.1中,是否可以在不从数据库检索的情况下关联两个实体?

Validation 在EntityFramework4.1中,是否可以在不从数据库检索的情况下关联两个实体?,validation,entity-framework-4,ef-code-first,data-annotations,Validation,Entity Framework 4,Ef Code First,Data Annotations,考虑以下场景: public class Entity1 { virtual public Int32 ID { get; set; } [Required] virtual public String Name { get; set; } [Required] virtual public Entity2 ReferenceToEntity2 { get; set; } } public class Entity2 { virtual publ

考虑以下场景:

public class Entity1
{
    virtual public Int32 ID { get; set; }
    [Required]
    virtual public String Name { get; set; }
    [Required]
    virtual public Entity2 ReferenceToEntity2 { get; set; }
}

public class Entity2
{
    virtual public Int32 ID { get; set; }
    [Required]
    virtual public String Name { get; set; }
    virtual public IList<Entity1> ListOfEntity1 { get; set; }
}

[TestClass]
public class EntityFrameworkTests
{
    [TestMethod]
    public void Should_save_entity_with_reference_to_entity_with_required_fields()
    {
        using (var db = new MyContext())
        {
            var entity1 = new Entity1
            {
                Name = "My name",
                ReferenceToEntity2 = new Entity2 { ID = 1 } // reference (Entity2 with ID=1) already exists in the database 
            };
            db.Entity1List.Add(entity1);
            db.SaveChanges(); // exception here
        }
    }

    [TestMethod]
    [ExpectedException(typeof(DbEntityValidationException))]
    public void Should_not_save_empty_entity2_name()
    {
        using (var db = new MyContext())
        {
            var entity2 = new Entity2 { Name = "" };
            db.Entity2List.Add(entity2);
            db.SaveChanges();
        }
    }
}
公共类实体1
{
虚拟公共Int32 ID{get;set;}
[必需]
虚拟公共字符串名称{get;set;}
[必需]
虚拟公共实体2 ReferenceToEntity2{get;set;}
}
公共类实体2
{
虚拟公共Int32 ID{get;set;}
[必需]
虚拟公共字符串名称{get;set;}
虚拟公共IList ListOfEntity1{get;set;}
}
[测试类]
公共类EntityFrameworkTests
{
[测试方法]
public void应保存带有引用的实体到带有必填字段的实体()
{
使用(var db=new MyContext())
{
var entity1=新entity1
{
Name=“我的名字”,
ReferenceToEntity2=new Entity2{ID=1}//数据库中已存在引用(ID=1的Entity2)
};
db.Entity1List.Add(entity1);
db.SaveChanges();//此处出现异常
}
}
[测试方法]
[ExpectedException(typeof(DbEntityValidationException))]
public void应\u不\u保存\u空\u entity2\u name()
{
使用(var db=new MyContext())
{
var entity2=新entity2{Name=”“};
db.Entity2List.Add(entity2);
db.SaveChanges();
}
}
}
第一次考试没有通过。当尝试保存Entity1实例时,将引发DbEntityValidationException,该异常引用Entity2的Name属性

我知道我可以按ID加载entity2实例,并使用entity1.ReferenceToEntity2=db.Entity2List.Find(entity2Id)将其关联起来。但实际上我有一个实体,有很多引用,我不想去数据库10次,只为了关联一个外键

是否可以将新的entity1实例插入到与现有entity2记录相关的数据库中,而无需转到数据库检索entity2


提前谢谢

附加
适用于这种情况:

public class Entity1
{
    virtual public Int32 ID { get; set; }
    [Required]
    virtual public String Name { get; set; }
    [Required]
    virtual public Entity2 ReferenceToEntity2 { get; set; }
}

public class Entity2
{
    virtual public Int32 ID { get; set; }
    [Required]
    virtual public String Name { get; set; }
    virtual public IList<Entity1> ListOfEntity1 { get; set; }
}

[TestClass]
public class EntityFrameworkTests
{
    [TestMethod]
    public void Should_save_entity_with_reference_to_entity_with_required_fields()
    {
        using (var db = new MyContext())
        {
            var entity1 = new Entity1
            {
                Name = "My name",
                ReferenceToEntity2 = new Entity2 { ID = 1 } // reference (Entity2 with ID=1) already exists in the database 
            };
            db.Entity1List.Add(entity1);
            db.SaveChanges(); // exception here
        }
    }

    [TestMethod]
    [ExpectedException(typeof(DbEntityValidationException))]
    public void Should_not_save_empty_entity2_name()
    {
        using (var db = new MyContext())
        {
            var entity2 = new Entity2 { Name = "" };
            db.Entity2List.Add(entity2);
            db.SaveChanges();
        }
    }
}
使用(var db=new MyContext())
{
var entity1=新entity1
{
Name=“我的名字”,
ReferenceToEntity2=newEntity2{ID=1}
//数据库中已存在引用(ID=1的Entity2)
};
db.Entity2List.Attach(entity1.ReferenceToEntity2);//必须在Add之前
db.Entity1List.Add(entity1);
db.SaveChanges();
}
它告诉EF数据库中已经存在ID为1的实体2。在
Attach
之后,实体处于
Unchanged
状态,EF不会向该实体的数据库发送任何UPDATE或INSERT语句。只更新
实体1
中的外键