C# 如何首先在实体框架代码中设置0..*关系?
我有两个类的下一个代码:C# 如何首先在实体框架代码中设置0..*关系?,c#,entity-framework,relationships,object-relationships,C#,Entity Framework,Relationships,Object Relationships,我有两个类的下一个代码: public class Object { public int ObjectID { get; set; } public int Object2ID { get; set; } public virtual Object2 Object2 { get; set; } } public class Object2 { public int Object2ID { get; set; } public virtual ICo
public class Object
{
public int ObjectID { get; set; }
public int Object2ID { get; set; }
public virtual Object2 Object2 { get; set; }
}
public class Object2
{
public int Object2ID { get; set; }
public virtual ICollection<Object> Objects { get; set; }
}
公共类对象
{
public int ObjectID{get;set;}
public int Object2ID{get;set;}
公共虚拟对象2对象2{get;set;}
}
公共类对象2
{
public int Object2ID{get;set;}
公共虚拟ICollection对象{get;set;}
}
我知道使用实体框架,这将创建一对多关系,但我想知道的是,如何将其转换为零对多关系
我是实体框架的新手,找不到任何直接的答案。对于实体框架中的0对多关系,外键应为空
public int? Object2ID { get; set; }
另一种方法是使用Fluent API:
public class YouDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder mb)
{
mb.Entity<Object2>
.HasMany(o1 => o1.Objects)
.WithOptional(o2 => o2.Object2);
base.OnModelCreating(mb);
}
}
公共类YouDbContext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder mb)
{
mb.实体
.HasMany(o1=>o1.Objects)
.with可选(o2=>o2.Object2);
基于模型创建(mb);
}
}
我是否需要将公共虚拟对象2 Object2{get;set;}也设置为可空,还是仅将键设置为可空?否。作为一个类,如果需要,Object2可以设置为空。@user355261它“本质上”是可空的。顺便说一句,类对象中不需要有Object2ID。它仍然是一对多关系,区别只是在依赖项上有必需的主体或可选的主体。我同意,我看不出你怎么能有一个0对任何东西的关系,如果某个东西有0,那么它就不能与任何东西相关。仅供参考,不使用的正常命名法∞
因为它是一个特殊字符,某些系统可能不喜欢Unicode。通常您会将其表示为0..*
,这是您在大多数文档参考中看到的内容。