C# 如何创建一个名为“的集合”;“拥有”;通过一个物体?
从这个问题开始,我有一个后续问题 我想创建一些由其他对象拥有的集合。总而言之,我有一个C# 如何创建一个名为“的集合”;“拥有”;通过一个物体?,c#,c#-4.0,C#,C# 4.0,从这个问题开始,我有一个后续问题 我想创建一些由其他对象拥有的集合。总而言之,我有一个Person类,我希望Person能够有一个或多个地址。所以我想我应该创建一个地址类和一个地址集合。有道理?这是到目前为止我的代码 class Person { public Person(int SSN, string firstName, string lastName) { this.SSN = SSN; FirstName = firstName;
Person
类,我希望Person
能够有一个或多个地址。所以我想我应该创建一个地址
类和一个地址
集合。有道理?这是到目前为止我的代码
class Person
{
public Person(int SSN, string firstName, string lastName)
{
this.SSN = SSN;
FirstName = firstName;
LastName = lastName;
}
public int SSN { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Address
{
public Address(string line1, string postCode)
{
Line1 = line1;
PostCode = postCode;
}
public int ID { get; set; }
public string Line1 { get; set; }
public string PostCode { get; set; }
}
class Addresses : System.Collections.CollectionBase
{
public int Person { get; set; } // should this be of type Person?
public void Add(Address addy)
{
List.Add(addy);
}
public Address Item(int Index)
{
return (Address)List[Index];
}
public void Remove(int index)
{
List.RemoveAt(index);
}
}
如何将多个地址与一个人关联?我想在Main
中执行类似操作:
Person p = new Person(123,"Marilyn","Manson");
Address a = new Address("Somewhere", "blahblah");
p.Addresses.Add(a);
然后我希望能够将地址保存到数据库中。我应该执行Address.Save()
还是Address.Save()
(或其他操作)
我将如何更改代码来实现这一点?谢谢查看。每个地址都应该保存()。您的地址可以保存,这将调用对其每个子项的保存
您可能希望有一个具有可枚举状态的基类,这样您就可以拥有New、Modified、UnModified和Deleted,这样您就可以选择调用CRUD的哪一部分了。有些人将其拆分,这样您就可以使用布尔值、isNew、isModified和isDeleted。每个地址都应该保存()。您的地址可以保存,这将调用对其每个子项的保存
您可能希望有一个具有可枚举状态的基类,这样您就可以拥有New、Modified、UnModified和Deleted,这样您就可以选择调用CRUD的哪一部分了。有些人将其拆分,这样您就可以使用布尔值、新值、修改值和删除值。如果此人“拥有”地址,则应公开一个地址属性。这可能是类型ReadonlyCollection
-无需创建自己的集合类型
public Person {
private List<Address> _addresses;
public ReadonlyCollection<Address> Addresses {
get { return _addresses.AsReadOnly(); }
}
public void AddAddress(Address address) {
_addresses.Add(address);
}
}
公众人物{
私人名单地址;
公共只读集合地址{
获取{返回_地址。AsReadOnly();}
}
公共无效地址(地址){
_地址。添加(地址);
}
}
如果您正在考虑好的类设计,请仔细考虑是否每个属性都需要setter。也许您希望对象不可变,在这种情况下,您需要私有setter
“保存”将遵循“ActiveRecord”模式。更常见的情况是,当使用类似NHibernate的ORM时,对象会跨越某个边界,该边界表示它已存储。在NHibernate中,这称为会话,负责根据可用信息保存对象。如果此人“拥有”地址,则应公开地址属性。这可能是类型ReadonlyCollection
-无需创建自己的集合类型
public Person {
private List<Address> _addresses;
public ReadonlyCollection<Address> Addresses {
get { return _addresses.AsReadOnly(); }
}
public void AddAddress(Address address) {
_addresses.Add(address);
}
}
公众人物{
私人名单地址;
公共只读集合地址{
获取{返回_地址。AsReadOnly();}
}
公共无效地址(地址){
_地址。添加(地址);
}
}
如果您正在考虑好的类设计,请仔细考虑是否每个属性都需要setter。也许您希望对象不可变,在这种情况下,您需要私有setter
“保存”将遵循“ActiveRecord”模式。更常见的情况是,当使用类似NHibernate的ORM时,对象会跨越某个边界,该边界表示它已存储。在NHibernate中,这称为一个会话,负责根据可用信息保存对象。如果您希望某人拥有地址,此人应包括一组地址
class Person
{
<all the stuff you have>
List<Address> Addresses;
}
Cal-如果您想要某人拥有的地址,此人应该包括一组地址
class Person
{
<all the stuff you have>
List<Address> Addresses;
}
Cal-这取决于您的体系结构……但是,为了保存地址,我不会使用address对象来保存地址。这是您的POCO(普通的旧CLR对象),它不应该知道DAL。另一个类应该处理CRUD(create-Read-Update-Delete)操作,它应该是与DAL交互的业务层的一部分。也许叫它AddressComponent.cs?这是一种领域模型模式方法
对于地址集合,您可以按照flq所说的操作并将其作为一个属性…实际上不需要另一个名为Addresses.cs的对象,除非您需要额外的逻辑。这取决于您的体系结构…但是,为了保存地址,我不会使用address对象来执行此操作。这是您的POCO(普通的旧CLR对象),它不应该知道DAL。另一个类应该处理CRUD(create-Read-Update-Delete)操作,它应该是与DAL交互的业务层的一部分。也许叫它AddressComponent.cs?这是一种领域模型模式方法
对于地址集合,您可以按照flq所说的操作,并将其作为属性使用……实际上不需要另一个名为Addresses.cs的对象,除非您需要额外的逻辑。我将使用泛型派生List(或任何其他集合类)
//此类仅向列表中添加所有者(父级)
公共类OwnedList:List
{
公共对象所有者{set;get;}
public OwnedList(对象所有者)
{
所有者=所有者;
}
}
只需在类中传递对象本身:
class Contact
{
public int Person { get; set; }
private OwnedList<Address> _Addresses;
public OwnedList<Address> Addresses
{
get
{
if (_Addresses == null)
{
_Addresses = new OwnedList<Address>(this);
}
return _Addresses;
}
set
{
_Addresses = value;
_Addresses.Owner = this;
}
}
}
class联系人
{
公共整数Person{get;set;}
私人拥有的名单地址;
公有名单地址
{
得到
{
if(_Addresses==null)
{
_地址=新的所有者列表(此);
}
返回地址;
}
设置
{
_地址=值;
_地址。所有者=此地址;
}
}
}
我将使用泛型派生列表(或任何其他集合类)
//此类仅向列表中添加所有者(父级)
公共类OwnedList:List
{
公共对象所有者{set;get;}
public OwnedList(对象所有者)
{
所有者=所有者;
}
}
只需在类中传递对象本身:
class Contact
{
public int Person { get; set; }
private OwnedList<Address> _Addresses;
public OwnedList<Address> Addresses
{
get
{
if (_Addresses == null)
{
_Addresses = new OwnedList<Address>(this);
}
return _Addresses;
}
set
{
_Addresses = value;
_Addresses.Owner = this;
}
}
}
class联系人
{
公共整数Person{get;set;}