[ 
https://issues.apache.org/jira/browse/CASSANDRA-7996?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Carl Yeksigian resolved CASSANDRA-7996.
---------------------------------------
       Resolution: Invalid
    Fix Version/s:     (was: 2.1.0)

C# driver issues should be reported to the [DataStax C# 
Jira|https://datastax-oss.atlassian.net/browse/CSHARP].

> Cassandra C# driver errors on virtual properties when using CreateIfNotExists 
> method
> ------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-7996
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7996
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Drivers (now out of tree)
>            Reporter: Thomas Atwood
>
> When using the Cassandra C# driver, I receive the error "An unhandled 
> exception of type 'Cassandra.SyntxError' occurred in Cassandra.dll when 
> attempting to create a table with an overridden property using the Linq 
> functionality with the driver.  If the property is not overriden, the driver 
> creates the table without any issues.
> Example:  concrete object inherits from abstract object where the Id field is 
> virtual on the abstract object.  Reason to override this field would be to 
> apply certain regex validation for format depending on the derived concrete 
> object (Id will still be unique across all objects that inherit from the 
> abstract object).
> Abstract object:
> using System;
> using System.ComponentModel;
> using Cassandra.Data.Linq;
> namespace TestDatastaxCsDriver.Abstract
> {
>     [AllowFiltering]
>     [Serializable]
>     public class AbstractEntity: INotifyPropertyChanged
>     {
>         private string _id;
>         private string _name;
>         private string _insertuser;
>         private DateTime _insertimestamp;
>         private DateTime _modifiedtimestamp;
>         public event PropertyChangedEventHandler PropertyChanged;
>         public AbstractEntity(string id, string name, string insertuser)
>         {
>             Id = _id;
>             Name = _name;
>             InsertUser = _insertuser;
>             InsertTimestamp = DateTime.Now;
>             ModifiedTimestamp = DateTime.Now;
>         }
>         [PartitionKey]
>         [Column("id")]
>         public virtual string Id
>         {
>             get { return _id; }
>             set
>             {
>                 if (value != _id)
>                 {
>                     _id = value;
>                     NotifyPropertyChanged("Id");
>                 }
>             }
>         }
>         [Column("name")]
>         public string Name
>         {
>             get { return _name; }
>             set
>             {
>                 if (value != _name)
>                 {
>                     _name = value;
>                     NotifyPropertyChanged("Name");
>                 }
>             }
>         }
>         [Column("insertuser")]
>         public string InsertUser
>         {
>             get { return _insertuser; }
>             set
>             {
>                 if (value != _insertuser)
>                 {
>                     _insertuser = value;
>                     NotifyPropertyChanged("InsertUser");
>                 }
>             }
>         }
>         [Column("inserttimestamp")]
>         public DateTime InsertTimestamp
>         {
>             get { return _insertimestamp; }
>             set
>             {
>                 if (value != _insertimestamp)
>                 {
>                     _insertimestamp = value;
>                     NotifyPropertyChanged("InsertTimestamp");
>                 }
>             }
>         }
>         [Column("modifiedtimestamp")]
>         public DateTime ModifiedTimestamp
>         {
>             get { return _modifiedtimestamp; }
>             set
>             {
>                 if (value != _modifiedtimestamp)
>                 {
>                     _modifiedtimestamp = value;
>                     NotifyPropertyChanged("ModifiedTimestamp");
>                 }
>             }
>         }
>         private void NotifyPropertyChanged(String propertyName = "")
>         {
>             if (PropertyChanged != null)
>             {
>                 PropertyChanged(this, new 
> PropertyChangedEventArgs(propertyName));
>                 ModifiedTimestamp = DateTime.Now;
>             }
>         }
>     }
> }
> Concrete object:
> using System.ComponentModel.DataAnnotations;
> using Cassandra.Data.Linq;
> using TestDatastaxCsDriver.Abstract;
> namespace TestDatastaxCsDriver.Concrete
> {
>     [Table("issuer")]
>     public class Issuer : AbstractEntity
>     {
>         public Issuer(string id, string name, string insertuser) : base(id, 
> name, insertuser)
>         {
>         }
> //Cassandra C# driver chokes on this.  No issues if the property is not 
> overriden.  Please note I also tried adding a column attribute to see if it 
> fixed the problem and it did not.
>         [MaxLength(3,ErrorMessage = "Id cannot be longer than 3 characters.")]
>         public override string Id
>         {
>             get
>             {
>                 return base.Id;
>             }
>             set
>             {
>                 base.Id = value;
>             }
>         }
>     }
> }
> Program.cs to test:
> using Cassandra;
> using Cassandra.Data.Linq;
> using TestDatastaxCsDriver.Concrete;
> namespace TestDatastaxCsDriver
> {
>     class Program
>     {
>         static void Main(string[] args)
>         {
>             Cluster cluster =
>                 
> Cluster.Builder().AddContactPoint("127.0.0.1").WithCredentials("cassandra", 
> "cassandra").Build();
>             var session = cluster.Connect();
>             session.CreateKeyspaceIfNotExists("test");
>             session.ChangeKeyspace("test");
>             var issuer = session.GetTable<Issuer>();
>             issuer.CreateIfNotExists();
>         }
>     }
> }
> The request would be to allow for the CreateIfNotExists method to ignore the 
> override keyword and to create the property with the type specified as long 
> as the type is one of the types supported by the driver (e.g. string, int, 
> bool, etc.).
> Please let me know if you need more sample code or additional clarification 
> regarding this request.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to