рамки один-на-один - PullRequest
       3

рамки один-на-один

0 голосов
/ 09 марта 2012

Знает ли какой-либо орган хороший пример связывания и вставки сущности один в один

Я хотел бы связать и иметь возможность вносить изменения в обе таблицы в одной winform, используя структуру сущностей.

Эта форма клиента будет содержать данные как от лица, так и от лица клиента где лицо-лицо будет иметь имя и фамилию, а лицо-клиент будет иметь соединение и т. д ...

Это отношения один на один.

1 Ответ

0 голосов
/ 20 апреля 2012

Просто используйте свойство virtual Customer в Person.Не нужно указывать ссылку в Customer.

Пожалуйста, найдите полный проект ниже

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;

namespace StackOverflow
{

    public class Context : DbContext
    {
        static Context()
        {
            Database.SetInitializer<Context>(null);
        }

        public DbSet<Person> People { get; set; }
    }


    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public virtual Customer Customer { get; set; }
    }

    public class Customer
    {
        public int Id { get; set; }
        public DateTime JoinDate { get; set; }
        //[NotMapped]
        //public virtual Person Person { get; set; }
    }



    class Program
    {
        static void Main(string[] args)
        {
            var context = new Context();
            context.Database.Delete();
            context.Database.Create();

            var person = new Person { Name = "Mark", LastName = "Streisand" };
            person.Customer = new Customer { JoinDate = DateTime.Now };
            context.People.Add(person);
            context.SaveChanges();

            var p = context.People.Find(1);
            var joinDate = p.Customer.JoinDate;
        }
    }
}

PS.На самом деле, я считаю, что ваш сценарий мог бы быть лучше спроектирован с Customer, унаследованным абстрактным Person классом.В этом случае вам не понадобится ссылка на Customer в Person, поскольку сам Customer будет экземпляром Person.Это позволит вам иметь несколько реализаций Person, все они сопоставлены с различными таблицами.

Посмотрите на этот фрагмент

    public abstract class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        //public virtual Customer Customer { get; set; }
    }

    [Table("Customers")]
    public class Customer : Person
    {
        //public int Id { get; set; }
        public DateTime JoinDate { get; set; }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...