Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6 CF中的外键问题_C#_Entity Framework_Ef Code First_Entity Framework 6_Ef Fluent Api - Fatal编程技术网

C# EF6 CF中的外键问题

C# EF6 CF中的外键问题,c#,entity-framework,ef-code-first,entity-framework-6,ef-fluent-api,C#,Entity Framework,Ef Code First,Entity Framework 6,Ef Fluent Api,请原谅我是EF的一个不速之客,首先是代码。我的问题是我不想将外键属性添加到模型中,根据MSDN,使用fluent API没有问题,但是我无法找出适合我当前情况的正确用法。这似乎很简单: public class Package { public Package() { Users = new Collection<User>(); } public Int32 Id {get; set;} public String Name

请原谅我是EF的一个不速之客,首先是代码。我的问题是我不想将外键属性添加到模型中,根据MSDN,使用fluent API没有问题,但是我无法找出适合我当前情况的正确用法。这似乎很简单:

public class Package
{
    public Package()
    {
        Users = new Collection<User>();
    }

    public Int32 Id {get; set;}
    public String Name {get; set;}
    public virtual User Creator {get; set;}

    public virtual ICollection<User> Users {get; set;}
}

public class User
{
    public Int32 Id {get; set;}
    public String Name {get; set;}
}

public class PackageContext : DbContext
{
    public DbSet<Package> Packages {get; set;}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Package>().HasRequired(p => p.Creator).WithMany();
        modelBuilder.Entity<Package>().HasMany(p => p.Users).WithRequired().Map(c => c.MapKey("PackageId"));

        base.OnModelCreating(modelBuilder);
    }
}
公共类包
{
公共软件包()
{
用户=新集合();
}
公共Int32 Id{get;set;}
公共字符串名称{get;set;}
公共虚拟用户创建者{get;set;}
公共虚拟ICollection用户{get;set;}
}
公共类用户
{
公共Int32 Id{get;set;}
公共字符串名称{get;set;}
}
公共类PackageContext:DbContext
{
公共DbSet包{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(p=>p.Creator).WithMany();
modelBuilder.Entity();
基于模型创建(modelBuilder);
}
}
我尝试过许多不同的流畅组合,但都没有成功。我遇到的最常见的例外是:

System.Data.Entity.Infrastructure.DbUpdateException:保存未公开其关系的外键属性的实体时出错。EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常

有人能帮我找出创建模型时需要拨打的正确流畅的电话吗?

u应该使用以下方法:

public class Package
{
    public Int32 Id {get; set;}
    public String Name {get; set;}
    public Int32 UserId {get; set;}

    public virtual User Creator {get; set;}    
}

public class User
{
    public User()
    {
        Packages = new Collection<Package>();
     }

    public Int32 Id {get; set;}
    public String Name {get; set;}

    public virtual ICollection<Package> Packages {get; set;}
}

public class PackageContext : DbContext
{
    public DbSet<Package> Packages {get; set;}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Package>().HasRequired(current => current.Creator)
            .WithMany(c=>c.Packages)
            .HasForeignKey(c=>c.UserId)
            .WillCascadeOnDelete(false);

    base.OnModelCreating(modelBuilder);
    }
}
公共类包
{
公共Int32 Id{get;set;}
公共字符串名称{get;set;}
公共Int32用户标识{get;set;}
公共虚拟用户创建者{get;set;}
}
公共类用户
{
公共用户()
{
Packages=新集合();
}
公共Int32 Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection包{get;set;}
}
公共类PackageContext:DbContext
{
公共DbSet包{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(当前=>current.Creator)
.WithMany(c=>c.Packages)
.HasForeignKey(c=>c.UserId)
.WillCascadeOnDelete(假);
基于模型创建(modelBuilder);
}
}