Авто-идентификаторы бар кілттік элементтері

Менде 2 пайдаланушы бар және User_Profile (бір-бір қатынастар) бар. Мен оларды келесідей байланыстырдым:

public class User
{
   [Key]   
   [ForeignKey("user_profile")]
   public int user_id {get;set;}

   public string username {get;set;}
   public string email {get;set;}

   public virtual User_Proile user_profile {get;set;}
}


public class User_Profile
{
   [Key]   
   public int user_id {get;set;}

   public string firstname {get;set;}
   public string lastname {get;set;}
}

user_id - SQL Server және User_Profile кестелерінде де. Сондай-ақ, ол Пайдаланушы кестесіндегі Тұлғалар бағаны ретінде орнатылады.

EFDBContext Add/SaveChanges арқылы жаңа жазбаны енгізген кезде. Мен келесі қатені таптым: «user_id User_Profile кестесінде NULL болмайды» Бұл мағынасы бар, себебі бұл ПК бағаны. Мен EF Пайдаланушылардан Identity user_id-ді қабылдауға және оны сақтағанда user_Profile user_id-ге кіргізе алатынын білдім деп үміттенген едім.

Мүмкін бе, егер мұны қалай жүзеге асырамын?

UPDATE: Please note that I manually created the DB tables and code classes so I dont have access to StoreGeneratedPattern via the .edmx file.

6

2 жауаптар

Өзіңіздің жеке қарым-қатынасыңызды Fluent API-ді қолдану арқылы айқын түрде жасау қажет деп есептеймін:

public class MyContext : DbContext
{
   //... your DbSets

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .HasRequired(u => u.user_profile)
            .WithRequiredPrincipal();
    }
}

Ал субъект сыныптары:

public class User
{
    [Key]   
    public int user_id {get;set;}
    public string username {get;set;}
    public string email {get;set;}
    public virtual User_Profile user_profile {get;set;}
}

public class User_Profile
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int user_id {get;set;}
    public string firstname {get;set;}
    public string lastname {get;set;}
}

DatabaseGeneratedOption -ден Identity -тен None -ге сыныптардың бірінде өшіру қажет. Мен негізгі және тәуелдімін ауыстырдым, себебі User негізгі болып табылады. [ForeignKey (...)] қажет емес, себебі EF User_id ішінде User_Profile ішіндегі FK сипатын User_id /code>.

Мұндай кодты ...

using (var context = new MyContext())
{
    var user = new User();
    var userProfile = new User_Profile();

    user.user_profile = userProfile;

    context.Users.Add(user);
    context.SaveChanges();
}

... сіз күткендей жұмыс істеуге тиіспіз және екеуі де байланысты деректерді дерекқорға сақтаңыз.

7
қосылды
Мәссаған! Бұл сіз айтып кеткендей толық жұмыс істеді. Көптеген рахмет Slauma!
қосылды автор chrisg229, көзі

Регулярлық өріс деректер базасы арқылы жасалғанын білу үшін сіздің .edmx файлындағы Identity StoreGeneratedPattern атрибутын орнатуыңыз керек. Бұл сілтеме көмектесе алады ...

Entity Framework көмегімен автоаннамалау

0
қосылды
Мен тек қана іздеу жасадым және менің app каталогымда edmx файл жоқ. Мен EF4 пайдаланамын. Мен бірдеңе жетіспеймін бе?
қосылды автор chrisg229, көзі
Мен кез келген .mdx файлын таба алмаймын және модельге ең жақын нәрсе - жасаған class.cs файлдары. DB кестесін және сыныптарын (сипатты/баған атауларын бірдей ете отырып) қолмен жасағанымды ескеріңіз, содан кейін ғана DBContext құрастырып, web.config ішіндегі дұрыс қосылымды жасаймын. Барлық жоғарыда көрсетілгендей, жоғарыда аталған жеке басын куәландыратын мәселе.
қосылды автор chrisg229, көзі
Менің ойымша, бұған баруға тура келеді. Сіздің көмекіңізге рақмет Saad!
қосылды автор chrisg229, көзі
Умм, бұл жерде болуы керек. .Edmx файлы негізінен сіз жасаған үлгі болып табылады, сондықтан осы атаумен файлды іздеңіз. Немесе шешіміңіздің зерттеушісіндегі үлгіні тінтуірдің оң жақ түймешігімен басып, оны xml редакторымен ашуға болады.
қосылды автор Saad Imran., көзі
Ахх, кем дегенде, визуализация жасау үшін дизайнерді пайдаланған деп ойладым. Өкінішке орай, басқа ештеңе білмеймін. Егер сіз оны анықтай алмасаңыз, бұл әрқашан опция. Үлгіні жасаңыз, кестелеріңізді импорттаңыз және код/​​мәтіндеңізді өшіріңіз, осылайша сіз өзіңіздің/контекст сыныптарын пайдалана аласыз.
қосылды автор Saad Imran., көзі